>백엔드 개발 >C++ >`enable_shared_from_this`는 C에서 공유 포인터 소유권 문제를 어떻게 해결합니까?

`enable_shared_from_this`는 C에서 공유 포인터 소유권 문제를 어떻게 해결합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 04:52:34688검색

How Does `enable_shared_from_this` Solve Shared Pointer Ownership Issues in C  ?

enable_shared_from_this가 객체 소유권 유지에 어떻게 도움이 됩니까?

Boost.Asio 예제를 탐색하는 동안 활성화_shared_from_this를 접했을 수 있습니다. 문서를 참조했음에도 불구하고 사용법이 불분명합니다. 다음은 그 목적을 명확히 하는 포괄적인 설명과 예입니다.

enable_shared_from_this를 사용하면 객체 자체(이로 표시)에만 액세스할 수 있는 경우 객체에 대해 유효한 shared_ptr 인스턴스를 생성할 수 있습니다. 이것이 없으면 이미 멤버로 정의되어 있지 않으면 이에 대한 shared_ptr을 얻는 것이 불가능합니다.

다음 예를 고려하십시오.

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
};

여기서 f() 메서드는 유효한 값을 반환할 수 있습니다. 멤버 인스턴스가 없더라도 shared_ptr입니다. 다음 접근 방식은 실패합니다.

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
};

결과는 참조 횟수가 다른 두 개의 shared_ptr이 됩니다. 개체가 삭제되면 그 중 하나가 매달린 참조가 됩니다.

enable_shared_from_this는 이제 C 11 표준의 일부이므로 Boost뿐만 아니라 거기에서도 액세스할 수 있다는 점에 유의하는 것이 중요합니다.

위 내용은 `enable_shared_from_this`는 C에서 공유 포인터 소유권 문제를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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