C++11 1.8.3.2 shared_ptr
shared_ptr는 이름에서 알 수 있듯이 여러 파티(각 파티가 포인터를 갖고 있음)에서 공통으로 사용하는 메모리를 관리한다. shared_ptr가 더 이상 데이터를 참조하지 않는 즉시 메모리를 자동으로 해제한다. 이렇게 하면 프로그램을 상당히 단순하게 만들 수 있다. 특히 복잡한 데이터 구조의 경우 더욱 그렇다. 매우 중요한 애플리케이션 영역은 바로 동시성이다. 즉, 모든 스레드가 스레드에 대한 접근이 끝나면 메모리를 자동으로 해제한다.
unique_ptr과 달리 shared_ptr는 원하는 만큼 자주 복사할 수 있다. 예를 들어,
shared_ptr<double> f() { shared_ptr<double> p1{new double}; shared_ptr<double> p2{new double}, p3 = p2; cout << "p3.use_count() = " << p3.use_count() << endl; return p3; } int main() { shared_ptr<double> p = f(); cout << "p.use_count() = " << p.use_count() << endl; }