목록cpp (43)
Nagie's DevStory
스마트 포인터는 동적으로 할당된 메모리를 관리하고 해제하는 데 도움을 주는 기능 중 하나다. 기존의 포인터는 동적 메모리를 사용할 때 new와 delete로 직접 관리를 해줘야 했지만 스마트 포인터를 사용하면 타 언어의 GC랑 유사하게 동작한다. 스마트 포인터의 종류는 3가지이며 헤더에 정의되어 있다. 그러면 각각의 스마트 포인터에 대해 알아보겠다. 1. shared_ptr 이름에서부터 어떤 목적으로 사용되는지 감이 오는 이 포인터는 여러 스마트 포인터가 같은 메모리 리소스를 공유할 수 있으며 리소스에 대한 참조 횟수를 추적하고, 참조 횟수가 0이 되면 자동으로 메모리 해제를 한다. 'shared_ptr'은 동적으로 할당된 메모리가 여러 객체를 참조할 때 유용하게 사용할 수 있다. #include int..
C++에서 C 스타일의 형변환을 사용할 수 있지만 권장하지는 않는다. 보기엔 조금 복잡해 보일 수는 있지만 C++에서 제공하는 형변환 연산자를 사용하는 게 권장되며 총 4가지 형변환 연산자가 있다. 1. static_cast 'static_cast'는 C++에서 보편적으로 사용되는 형변환 연산자로 컴파일러가 자동으로 변환할 수 있는 형식 간의 형변환을 해준다. 간단하게 정수를 실수로 변환하거나 서브 클래스 포인터를 슈퍼클래스 포인터로 변환할 때 사용된다. //static_cast의 사용법 int integerNumber = 42; double doubleNumber = static_cast(integerNumber); 2. dynamic_cast 'dynamic_cast'는 주로 다형성을 다룰 때 사용되..
람다식은 C++11 부터 도입된 기능이며 익명 함수를 정의해 사용하는 방법이다. 람다식은 간결하고 가독성이 높은 코드를 작성하는 데 도움을 주기 위해 만들어진 문법이지만 때론 가독성을 챙기기 위해 사용한 람다식이 되려 가독성을 해치는 원인이 되기도 해 사용 시 주의가 필요하다. 람다식은 다음과 같이 사용할 수 있다. [캡처 목록](매개변수 목록) -> 반환형식 { // 람다식의 본문 } '[캡처 목록]'은 람다식에서 외부 변수를 캡처하는 방법을 지정한다. 외부 변수에 대한 읽기 또는 쓰기 액세스를 허용하거나 제한할 수 있다. 기호는 '=' 또는 '&'를 사용할 수 있으며 '='을 지정 시 값을 받아올 수는 있어도 값을 바꾸는 것은 불가능하며 '&' 지정 시 변수에 대한 참조를 받아올 수 있기에 람다식에서..
우리는 지금까지 C++에서 제공하는 데이터의 타입으로 연산을 해왔다. 그러나 C++에서 기본 제공하는 연산자로는 객체 간 연산이 불가능했고 이를 해결하기 위해 연산자 오버로딩이라는 개념이 등장하게 된다. 즉 "내가 만든 객체의 연산 방법은 내가 정하겠다!"라는 의미라고 생각하면 이해가 빠르겠다. 다음은 연산자 오버로딩의 기본적인 사용법이다. 반환형식 operator 연산자명(매개변수) { // 연산자 동작을 정의하는 코드 } 여기서 "반환 형식"은 연산자의 결과 형식을 나타내며 "연산자명"은 오버 로딩하려는 연산자를 나타내고 "매개변수"는 연산자에 필요한 피연산자를 나타낸다. 예를 들어 덧셈 연산자(+)를 사용자 정의 클래스에 대해 오버 로딩을 한다면 다음과 같은 코드로 작성할 수 있겠다. class C..
앞서 함수 템플릿에 대해 글을 작성한 적이 있지만 모든 템플릿 문법을 설명한 게 아니라 추가적인 포스팅을 하게 됐다. C++에서 사용하는 템플릿 문법은 총 3가지가 있으며 가장 많이 사용하는 문법은 함수 템플릿과 클래스 템플릿이다. C++14부터 추가된 변수 템플릿이라는 문법도 있긴 하지만 많이 사용하는 걸 못봤다. 그럼, 함수 템플릿부터 설명하겠다. 1. 함수 템플릿 (Function Template) 함수 템플릿은 함수의 틀을 만드는 데 사용된다. 템플릿을 사용하면 다양한 데이터 형식에 대해 동일한 함수 로직을 사용할 수 있으며 함수 템플릿은 일반 함수처럼 정의되지만 데이터 형식을 템플릿 파라미터로 사용한다. 다음은 함수 템플릿의 사용 예시이다. template T add(T a, T b) { ret..