> 백엔드 개발 > C++ > C에서 `enable_shared_from_this`를 언제 어떻게 사용해야 합니까?

C에서 `enable_shared_from_this`를 언제 어떻게 사용해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-13 10:00:22
원래의
170명이 탐색했습니다.

When and How Should You Use `enable_shared_from_this` in C  ?

enable_shared_from_this의 중요성 이해

질문:

Boost.Asio 예제를 탐색하는 동안, 많은 개발자가 Enable_shared_from_this 개념을 접하게 됩니다. 문서를 읽었음에도 불구하고 실제 적용은 불분명합니다. 예를 들어 이 클래스를 활용하는 것이 적절한지 설명해 주시겠습니까?

답변:

enable_shared_from_this는 "this"에 유효한 shared_ptr 인스턴스를 얻을 수 있는 기능을 부여합니다. "this"만 사용할 수 있는 상황에서. 이 기능이 없으면 "this"에 대한 shared_ptr을 얻으려면 이미 하나를 멤버로 정의해야 합니다.

Boost 문서에서 다음 예를 고려하세요.

class Y: public enable_shared_from_this<Y> {
public:
    shared_ptr<Y> f() {
        return shared_from_this();
    }
};

int main() {
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}
로그인 후 복사

f() 메서드는 반환합니다. 멤버 인스턴스가 없음에도 불구하고 유효한 shared_ptr.

단순히 shared_ptr을 반환하면 구성된다는 점에 유의하는 것이 중요합니다. "this"를 인수로 사용하는 것은 허용 가능한 솔루션이 아닙니다. 합법적인 "공유" 참조 횟수와 다른 참조 횟수가 발생하기 때문입니다. 결과적으로 공유 포인터 중 하나는 객체 삭제 시 매달린 참조로 끝날 수 있습니다.

enable_shared_from_this는 이제 C 11 표준의 일부이므로 C 11과 Boost를 통해 액세스할 수 있습니다.

위 내용은 C에서 `enable_shared_from_this`를 언제 어떻게 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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