본문 바로가기

C++3

Effective Modern C++ :: Chapter 4. 스마트 포인터 항목 18. 소유권 독점 자원의 관리에는 std::unique_ptr를 사용 std::unique_ptr은 C++에서 제공하는 스마트 포인터이다. 동적으로 힙 영역에 할당된 인스턴스에 대한 소유권을 얻고 unique_ptr 객체가 사라지만 해당 인스턴스를 해제하게 된다. 복사는 허용되지 않는다. 두 복사된 객체가 같은 자원을 가리키고, 두 포인터 모두 자신이 소유하고 있다고 생각하는 상황이 벌어지기 때문이다. 두 가지의 형태가 있기 때문에 어떤 종류를 가리키는지에 대한 애매함이 발생하지 않는다. std::unique_ptr : 개별 객체를 위한 것 std::unique_ptr : 배열을 위한 것 delete를 적용시 자신이 가리키는 자원을 파괴할 수 있다. delete를 사용할 때는 std::unique.. 2020. 3. 2.
Effective Modern C++ :: Chapter 3. 현대적 C++에 적응하기 항목 7. 객체 생성시 괄호()와 중괄호{}를 구분하라 중괄호 초기화는 균일화 초기화와 같은 말이다. 중괄호 초기화의 특징은 다음과 같다. - 가장 광범위하게 적용할 수 있는 초기화 구문 - 축소 변환을 방지 - 성가신 구문해석에서 자유로움 - 생성자 오버로딩 해소 과정에서 std::initializer_list 매개변수가 있는 생성자와 부합한다. (복사/이동 생성시에도 동일) - 빈 중괄호 쌍을 사용하면 기본 생성자가 호출된다. 즉, std::initializer_list가 아니라 인수 없음을 뜻한다. class Widget { public: Widget(int i, bool b); // 1 Widget(int i, double d); // 2 ... }; Widget w1(10, true); // 1.. 2020. 2. 24.
Effective Modern C++ :: Chapter 2. auto 항목 5. auto를 선호하라 명시적 타입 선언보다 auto를 선호하라는 것이 이번 챕터의 내용이다. auto를 사용할 때의 장점에는 여러가지가 있다. 1. 타입 불일치가 발생하는 경우가 거의 없다. 2. 명시적 지정보다 타자량이 적다. 3. 초기화 표현식의 타입이 변하면 자동으로 변한다. = 리펙터링이 수월해진다. 1번의 내용은 타입 선언을 컴파일러의 도움으로 하기 때문에 타입 불일치가 줄어든다고 한다. auto를 사용하기전에 알아야 할 내용은 auto 변수는 반드시 초기화를 해야한다는 것이다. int x1; auto x2; // 오류. auto 변수는 필수적으로 초기화를 해야한다. auto x3=0; // 성공 auto를 사용하면 훨씬 간단하게 코드를 짤 수 있다. // 명시적 타입 선언을 사용했을 .. 2020. 2. 24.