>백엔드 개발 >C++ >\'this\'의 std::shared_ptr을 사용할 때 순환 종속성을 방지하는 방법은 무엇입니까?

\'this\'의 std::shared_ptr을 사용할 때 순환 종속성을 방지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 04:43:29566검색

How to Prevent Circular Dependencies When Using std::shared_ptr of

"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>
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.