"this"에 대한 참조를 전달하기 위해 std::shared_ptr을 사용하는 방법
객체 지향 프로그래밍에서는 객체에 대해 일반적입니다. 서로 관계를 유지하기 위해. 여기에는 종종 서로에 대한 참조를 보유하는 객체가 포함되어 통신 및 데이터 공유가 가능합니다. C에서 객체 참조를 관리하는 한 가지 방법은 스마트 포인터, 특히 std::shared_ptr을 사용하는 것입니다.
클래스 A가 클래스 B의 객체에 대한 std::shared_ptr 참조 목록을 보유하는 가상 시나리오를 생각해 보세요. 여기서 각 B 객체는 상위 A 객체에 대한 참조도 보유해야 합니다. 이는 도전 과제를 제기합니다. 클래스 A가 자신의 std::shared_ptr(this)을 하위 B에게 안전하게 전달할 수 있는 방법은 무엇입니까?
간단한 접근 방식은 child->setParent(this)와 같은 것을 시도하는 것일 수 있습니다. , 그러나 이는 유효한 std::shared_ptr이 아니기 때문에 올바르지 않습니다. 해결책은 std::enable_shared_from_this를 사용하는 것입니다.
std::enable_shared_from_this
std::enable_shared_from_this 소개는 객체가 std를 반환할 수 있도록 하는 기본 클래스입니다. ::shared_ptr 자신에 대한 참조입니다. std::enable_shared_from_this를 상속함으로써 클래스 A는 .shared_from_this()를 호출하여 자체 인스턴스에 대한 공유 포인터를 얻을 수 있는 기능을 얻습니다.
std::enable_shared_from_this를 사용하는 솔루션
아래 수정된 코드에서 클래스 A는 std::enable_shared_from_this에서 상속하도록 만들어졌으며 child->setParent() 호출은 이제 .shared_from_this()를 사용합니다.
<code class="cpp">class A : public std::enable_shared_from_this<A> { public: void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); } private: // Note the use of std::weak_ptr here std::list<std::weak_ptr<B>> children; };</code>
이 업데이트에서 코드:
이 접근 방식으로 문제가 해결됩니다. 부모 A 객체에서 자식 B 객체로 "this"의 std::shared_ptr을 전달하는 문제. std::enable_shared_from_this를 사용하고 std::weak_ptr로 순환 종속성을 관리하면 안전하고 효과적인 참조 공유 메커니즘이 달성됩니다.
위 내용은 \"this\"의 `std::shared_ptr`을 C의 상위 개체에서 하위 개체로 안전하게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!