auto_ptr은 더이상 쓰지 않는다
http://egloos.zum.com/sweeper/v/2826435
스마트 포인터를 사용하기 위해서는
#include <memory>
using namespace std;
가 필요하다.
make_unique - 이동만 가능하며, 복사는 허용하지 않음
http://en.cppreference.com/w/cpp/memory/unique_ptr
auto sp = std::make_unique<int>(12);
//auto sp2 = sp; // error
auto sp3 = std::move(sp);
// sp는 이제 empty, 소유권은 sp2에게 넘어감
make_shared - 포인터 복사가 가능, 내부적으로(Control Block) 참조카운트를 가지고 있음
http://en.cppreference.com/w/cpp/memory/shared_ptr
unique_ptr보다 사이즈가 2배가 큼
A->B, C->B, B->A 와 같은 순환참조의 경우 참조카운트가 꼬일수 있으므로
이럴때 weak_ptr을 사용한다.( 드문케이스 )
std::weak_ptr - 참조만 하며 내부카운트는 증가시키지 않는다.
주의해야 할점은 weak_ptr 가 shared_prt 보다 더 오래 살아 남아야 할 경우
사용하지 말아야 한다.
auto sp = std::make_shared<int>(12);
std::weak_ptr<int> sp2 = sp; // 여전히 참조카운트는 1
커스텀 메모리 관리 기능을 가진 클래스를 다루는 경우나
메모리가 넉넉치 않은 시스템에서 큰 객체를 자주 다뤄야 하는 경우를 제외하고는
new로 직접 할당하는 것보다 예외에 더 안전하므로, C++11 이상에서는
이와 같은 스마트 포인터 사용을 권장한다.
끝.
'프로그래밍 > C++' 카테고리의 다른 글
char 배열 초기화 방법 (0) | 2016.09.29 |
---|---|
printf 류 함수에서 int64 형 데이터 사용방법 (0) | 2016.09.22 |
C++11 재정의규칙과 override (0) | 2016.07.11 |
C++11 이동생성자 (Move Constructor) (2) | 2016.07.05 |
C++ 포인터와 참조의 차이 (0) | 2016.07.04 |