본문 바로가기

C++0x

[C++11] 새로운 스마트 포인터 unique_ptr(auto_ptr의 대체) C++11에서 auto_ptr이 사라지고 unique_ptr이 새로 추가되었습니다.auto_ptr의 문제점에 대해서는 아래의 글을 확인하시면 됩니다.2014/12/08 - [Programming/C&C++] - 스마트하지 못한 스마트한 포인터 auto_ptrauto_ptr을 대체하는 unique_ptr에 대해서 알아보도록 하겠습니다.unique_ptr은 auto_ptr과 거의 유사한 멤버를 가지고 있습니다.동적 할당된 포인터를 받아서 해당 포인터를 핸들링하고 자동으로 메모리를 해제하는 역할까지 동일합니다.* 연산자나 -> 연산자도 auto_ptr과 동일하게 지원합니다.unique_ptr을 생성하는 코드를 보도록 하겠습니다. #include #include #include struct TestStuff {.. 더보기
[C++11] cbegin()과 cend(), crbegin()과 crend() C++의 STL 컨테이너들은 Iterator(반복자)를 통해서 내부에 있는 데이터의 한 위치를 가리킬 수가 있습니다.Iterator의 종류는 Input, Output, Foward, Bidirectional, Random Access로 구분할 수 있습니다.Input과 Output은 각각 출력과 입력만을 담당하는 최소한의 기능을 가지고 있는 Iterator입니다. Foward의 경우는 순방향 Iterator로 한 쪽으로(처음 -> 끝) 이동하는 Iterator입니다.Bidirectional은 이름 그대로 양방향으로 이동이 가능한 Iterator입니다.Random Access는 랜덤하게 한 곳을 콕 찝어서 이동이 가능한 Iterator입니다.Input -> Foward -> Bidirectional -> R.. 더보기
[C++11] final과 override C++에서는 명시적으로 클래스의 상속을 막는 방법이 없었습니다.C++ CLI 등에서 selaed라는 키워드가 존재했지만 이것은 표준이 아닌 MS 확장 키워드입니다.C# 역시 sealed라는 키워드를 사용합니다.C#의 sealed 키워드에 대한 내용은 다음 링크에서 확인 가능합니다.2014/12/27 - [Programming/C#] - sealed 키워드를 사용한 클래스 상속 방지C++ CLI나 C#이나 모두 닷넷을 지원하기 위해서 만들어진 것을 생각하면 공통된 특정 키워드가 있는 것이 이해가 갑니다.C++11에서는 상속을 정교하게 다루기 위해 final과 override라는 새로운 키워드가 추가되었습니다.final은 상속을 차단하기 위해 추가된 키워드이고, override는 클래스의 메소드를 명시적으로.. 더보기
[C++11] RValue Reference(4) 6. RValue Reference의 추가적인 특징RValue Reference의 추가적인 특징들입니다.이미 설명한 것과 같이 RValue의 Move Sematics와 Perfect Fowarding은 성능 향상에 많은 도움을 제공합니다.그 외 RValue Reference의 추가적인 특징은 다음과 같습니다.1) RValue Reference와 LValue Reference를 받는 함수를 오버로딩 가능하다.RValue와 LValue는 다르게 취급되기 때문에 RValue Reference와 LValue Reference를 전달받는 함수는 오버로딩이 가능합니다.이미 생성자와 대입 연산자를 통해서 알아 본 내용입니다. #include using namespace std; // A class that conta.. 더보기
[C++11] RValue Reference(3) 5. Forwarding Problem과 Perfect FowardingFowarding Problem은 레퍼런스 타입을 매개 변수로 갖고 있는 제너릭 함수에서 발생할 수 있습니다.레퍼런스 타입의 매개변수를 다른 함수에 전달해 주는 과정에서 발생할 수 있습니다.예제를 먼저 확인하겠습니다. struct W { W(int&, int&){} }; struct X { X(const int&, int&){} }; struct Y { Y(int&, const int&){} }; struct Z { Z(const int&, const int&){} }; template T* factory(A1& a1, A2& a2) { return new T(a1, a2); } int main() { int a = 4, b = 5;.. 더보기
[C++11] NULL을 대체하는 nullptr C++이 2011년에 최신 개정판이 추가되었습니다.기존에 C++0x로 불리다가 정식으로 채택되면서 C++11로 이름이 변경 되었습니다.C++11은 개정된 년도를 따는 기존의 방식에 따라서 이름이 붙여졌습니다.이전에 개정된 TR1(Technical Report 1)이 STL의 기능적인 추가에 치중했다면이번 C++11은 C++의 기본 문법적인 부분에 변경이 있습니다.문법적인 변경 사항에 대해서 하나하나 살펴보고자 합니다.첫 번째 변경 사항은 nullptr 입니다.nullptr은 NULL을 대체하게끔 만들어졌습니다.기존 NULL의 문제점C++ 03 4.10 절에서 0은 integer 상수와 널 포인터 상수 두 개의 기능을 갖는다고 되었습니다.이 정의는 K&R C의 정의에 기반하고 있습니다.여기서 문제가 발생되.. 더보기