1.6.2.1 shared_ptr<T> 객체 초기화하기
shared_ptr<T> 객체에 nullptr를 할당하면 저장된 주소가 nullptr로 바뀌고, 이는 객체에 대한 포인터의 레퍼런스 카운트를 1감소시킨다.
auto pname = std::make_shared<std::string>("Charles Dickens"); // 문자열 객체를 가리킨다 // ... 많은 일이 벌어지고 ... pname = nullptr; // pname을 nullptr로 초기화
이 코드는 자유 공간에 "Charles Dickens"로 초기화된 string 객체를 생성하고, 이 주소를 담은 공유 포인터를 생성한다. 마지막으로 pname에 nullptr를 할당하는 건 저장된 주소를 nullptr로 대체하는 것이다. 물론, string 객체의 주소를 갖고 있는 다른 shared_ptr<T> 객체들이 있으니 문자열은 메모리에서 사라지지 않는다. 다만, 레퍼런스 카운트가 감소할 뿐이다.
shared_ptr<T> 객체에서 reset()을 인수 없이 호출해도 같은 결과를 얻을 수 있다.
pname.reset(); // nullptr로 초기화
reset()에 원시 포인터를 전달해서 공유 포인터가 가리키는 주소를 바꿀 수도 있다.
pname.reset(new std::string{"Jane Austen"}); // pname은 새 문자열을 가리킨다
reset()에 사용하는 인수는 스마트 포인터에 처음 저장했던 것과 같은 타입의 주소여야 하고, 아니면 암묵적으로 변환할 수 있는 타입의 주소여야 한다.