"this"의 std::shared_ptr: 순환 종속성 이해
std::enable_shared_from_this에서 상속하는 것이 "std" 문제를 해결하는 열쇠입니다. ::shared_ptr은 이" 수수께끼입니다. 이를 활성화하면 .shared_from_this()를 호출하여 현재 객체에 대한 공유 포인터를 얻을 수 있습니다. 그러나 이로 인해 상위 개체와 하위 개체 사이에 잠재적인 순환 종속성이 발생합니다.
이 문제를 해결하려면 상위 개체에 대한 하위 참조에 std::weak_ptr을 사용하는 것이 좋습니다. 이는 강력한 순환 참조의 형성을 방지하고 리소스 누출을 방지합니다. 수정된 코드는 이 접근 방식을 구현하는 방법을 보여줍니다.
<br>class A : public std::enable_shared_from_this<a> {<br>public:</a></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); }
private :
std::list<std::weak_ptr<B>> children;
};
클래스 B {
공개:
void setParent(std::shared_ptr<A> parent) { this->parent = parent; }
비공개:
std::shared_ptr<A> parent;
};
.shared_from_this()를 호출하려면 호출 시 현재 객체가 std::shared_ptr에 의해 관리되어야 한다는 점에 유의하는 것이 중요합니다. 이는 스택에 이러한 객체를 생성하는 것이 더 이상 가능하지 않으며 생성자나 소멸자에서 .shared_from_this()를 호출하는 것은 일반적으로 권장되지 않음을 의미합니다.
위 내용은 \'this\'의 std::shared_ptr을 사용할 때 순환 종속성을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!