본문 바로가기

std::unique_ptr2

Pimpl 관용구를 사용할 때에는 특수 멤버 함수들을 구현 파일에서 정리하라 Pimpl 관용구는 클래스의 자료 멤버들을 구현 클래스 또는 구조체를 가리키는 포인터로 대체하고, 일차 클래스에 쓰이는 자료 멤버들을 그 구현 클래스로 옮기고, 포인터를 통해 그 자료 멤버들에 간접적으로 접근하는 방법이다. 일반적으로 헤더의 의존도를 떨어뜨리고, 컴파일 시간을 단축해 준다. 기존 C++98에서의 구현 방법 예시이다. // "widget.h" class Widget { public: Widget(); ... private: std::string name; std::vector data;// 헤더 내에 #include , #include 필요 Gadget g1, g2, g3; }; // Pimpl 관용구 적용 class Widget { public: Widget(); ~Widget();// .. 2020. 7. 16.
std::unique_ptr std::unique_ptr는 항상 자신이 가리키는 객체를 소유한다. std::unique_ptr를 이동시 소유권이 원본 포인터에서 대상 포인터로 옮겨진다. std::unique_ptr의 복사는 허용되지 않는다. 만약 복사가 가능하다면 두개의 std::unique_ptr가 같은 자원을 가리키며 두 포인터 모두 그 자원을 소유하고있다는 얘기가 된다. 그렇기 때문에 std::unique_ptr은 이동 전용(move-only) 형식이며 소멸시 자신이 가리키는 자원을 파괴한다. 기본적으로 파괴는 std::unique_ptr안에 있는 생포인터에 delete를 적용함으로써 수행된다. std::unique_ptr은 Hierachy 구조에서 객체를 생성하는 팩터리 함수의 반환형식으로 쓰기에 적합하다. hierachy .. 2020. 7. 12.