> 백엔드 개발 > C++ > `std::shared_ptr`을 사용하여 \'this\'에 대한 참조를 하위 개체와 안전하게 공유하려면 어떻게 해야 합니까?

`std::shared_ptr`을 사용하여 \'this\'에 대한 참조를 하위 개체와 안전하게 공유하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-10-29 11:46:30
원래의
407명이 탐색했습니다.

How Can I Safely Share a Reference to

"this" 수수께끼의 std::shared_ptr

스마트 포인터 영역에서는 클래스 객체가 다음과 같은 시나리오에 직면할 수 있습니다. 부모인 A는 클래스 B의 개체인 자식과 자신에 대한 참조를 공유해야 합니다. 그러나 "this"에 대한 간단한 포인터를 전달하면 무의미한 오류가 발생할 수 있습니다.

해결책은 수수께끼에 있습니다. std::enable_shared_from_this 도구입니다. 이 클래스에서 상속하면 클래스 내에서 .shared_from_this()에 액세스할 수 있게 되어 현재 객체의 공유 소유권을 부여하게 됩니다.

그럼에도 불구하고 이러한 상호 연결성에서 중요한 주의 사항이 나타납니다. 바로 순환 종속성이 발생할 수 있다는 것입니다. 리소스 누출의 위험을 피하려면 이러한 종속성을 생성할 때 std::weak_ptr을 도입하는 것이 좋습니다.

이 수정된 접근 방식을 수용하면 수정된 코드는 다음과 유사할 수 있습니다.

<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()); // Corrected reference passing
    }

private:
    std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references
};

class B
{
public:
    void setParent(std::shared_ptr<A> parent)
    {
        this->parent = parent;
    }

private:
    std::shared_ptr<A> parent;
};</code>
로그인 후 복사

.shared_from_this()를 호출하려면 호출 시 std::shared_ptr에 의한 객체 소유권이 필요하다는 점을 명심하세요. 이는 스택에 할당된 객체의 가능성을 제거하고 일반적으로 생성자 또는 소멸자 내에서 .shared_from_this()에 대한 호출을 제한합니다.

위 내용은 `std::shared_ptr`을 사용하여 \'this\'에 대한 참조를 하위 개체와 안전하게 공유하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿