스마트 포인터 사용에서 두 개의 관련 객체 A와 B가 다음에 액세스해야 하는 시나리오가 종종 발생합니다. 서로. 그러나 이 연결을 설정하기 위해 std::shared_ptr을 전달하는 것은 어렵습니다.
예를 들어, 하위 객체 B를 추가해야 하는 상위 클래스 A를 생각해 보세요. 상위의 addChild 메소드는 이상적으로 std::를 전달해야 합니다. shared_ptr을 자식에 할당하므로 부모를 참조할 수 있습니다.
그러나 this 포인터가 rvalue이기 때문에 직접 자식>setParent(this) 시도는 실패합니다. 이 문제를 해결하기 위해 C에서는 std::enable_shared_from_this를 제공합니다.
std::enable_shared_from_this는 std::shared_ptr을 통해 객체 공유를 용이하게 하는 클래스 템플릿입니다. 이를 상속함으로써 수정된 코드에서 볼 수 있듯이 필요한 std::shared_ptr을 제공하는 shared_from_this()에 액세스할 수 있습니다.
<code class="cpp">class A : public std::enable_shared_from_this<A> { ... child->setParent(shared_from_this()); // now valid };</code>
또한 메모리 누수로 이어질 수 있는 순환 종속성을 방지하기 위해 , 부모의 존재에 의존하는 자식에 대해서는 std::weak_ptr을 사용하는 것이 좋습니다.
<code class="cpp">std::list<std::weak_ptr<B>> children; // now using weak_ptr</code>
.shared_from_this()는 호출할 때만 호출해야 한다는 점에 유의하는 것이 중요합니다. 객체는 std::shared_ptr에 의해 관리됩니다. 이는 스택에서 생성될 수 없으며 일반적으로 생성자나 소멸자에서 호출될 수 없음을 의미합니다.
위 내용은 `this`의 `std::shared_ptr`을 관련 개체에 안전하게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!