공유포인터(shared_ptr)은 auto_ptr을 대체하는 쉽게 말해 가비지컬렉션(GC) 기능이 구현된 포인터다. 공유포인터의 특징은 자기가 생성될 때, 참조될 때마다 카운트가 발생하는데 참조가 끊어지면 다시 카운트가 내려가고 카운트가 0 이될 때 힙 구역이 자동으로 파괴된다.
shared_ptr<Class> ptr_name1(new Class()); // 카운트 +1
shared_ptr<Class> ptr_name2 = ptr_name1; // 카운트 +1
ptr_name2=nullptr // 카운트 -1
return; // 카운트 -1, 카운트가 0이 되어 자동으로 ptr_name1의 동적할당영역이 제거된다.
- 두 개의 shared_ptr 을 swap하기
- 객체 삭제 및 다른 객체로 바꾸기
ptr_name1.swap(ptr_name2);
ptr_name1.reset(new class(n));
순환 참조 오류는 주의해야 하는 대표적인 실수 유형이다.
ptr_name1->m_object = ptr_name2;
ptr_name2->m_object = ptr_name1;
위와 같이 객체 간에 멤버변수로 인해 서로 결합된 경우, 카운트가 내려가지 않아 객체가 소멸되지 않는다.