소유자를 한 명으로 시작한다
대부분은 unique_ptr 또는 값 멤버로 표현할 수 있다. shared_ptr은 실제 공유 수명이 있을 때만 쓴다.
unique_ptr, shared_ptr, weak_ptr은 delete를 자동화하는 정도가 아니라 누가 객체를 소유하는지 타입으로 드러낸다. 공유가 필요한 순간부터 비용과 순환 참조를 함께 본다.
대부분은 unique_ptr 또는 값 멤버로 표현할 수 있다. shared_ptr은 실제 공유 수명이 있을 때만 쓴다.
함수 인자로 unique_ptr을 값으로 받으면 소유권 이전, T*나 T&는 관찰을 뜻하게 둔다.
shared_ptr끼리 서로 잡으면 카운트가 0이 되지 않으므로 한쪽은 weak_ptr로 만든다.
std::unique_ptr<Node> make_node(std::string name) {
return std::make_unique<Node>(std::move(name));
}
void attach(std::unique_ptr<Node> child); // 호출 후 child 소유권 이전