>백엔드 개발 >C++ >왜 `shared_from_this()`를 생성자에서 직접 사용할 수 없나요?

왜 `shared_from_this()`를 생성자에서 직접 사용할 수 없나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 21:00:04406검색

Why Can't `shared_from_this()` Be Used Directly in Constructors?

생성자에서 shared_from_this()의 제한 이해

shared_from_this() 개념은 개체에 대한 공유 포인터를 설정하는 데 편리해 보일 수 있습니다. 생성자 내에서. 그러나 직접적으로 사용하기에는 기술적인 한계가 있습니다. 문제를 이해하기 위해 기본 메커니즘을 살펴보겠습니다.

퍼즐: 자체 저장 shared_ptr 및 구성 타이밍

도서 참조에 따르면 shared_ptr은 다음 위치에 저장됩니다. 활성화_공유_from_this<>의 비공개 멤버 Person의 기본 클래스 내에서. 혼란은 두 가지 핵심 사항에서 발생합니다.

  • 자체 저장 shared_ptr: 저장된 shared_ptr은 클래스 외부에서 생성된 실제 shared_ptr입니다.
  • 구성 타이밍: Shared_ptr 저장은 Person의 구성 프로세스가 끝날 때 발생합니다.

왜 shared_from_this()가 생성자에서 제한됩니까?

생성자에서 shared_from_this()의 제한은 생성의 순차적 특성 때문입니다. Person의 생성자가 실행되는 동안 Person 객체를 가리킬 수 있는 shared_ptr이 아직 생성되지 않았습니다. shared_ptr은 Person이 생성된 후에 외부적으로 생성됩니다.

shared_from_this()의 기본 메커니즘

enable_shared_from_this<> 개체 내에 숨겨진 Weak_ptr을 설정하는 방법을 제공합니다. 그런 다음 이 약한_ptr은 개체 외부에서 생성된 첫 번째 공유_ptr에서 자체 초기화하는 데 사용됩니다. 그러나 이 초기화는 shared_ptr이 외부에서 생성될 때만 발생합니다.

결론

shared_from_this()를 사용하면 클래스 외부의 객체에 대한 공유 포인터를 생성할 수 있지만, 생성자 내에서의 사용은 생성 순서에 따라 제한됩니다. shared_ptr은 객체 구성이 완료된 후 외부에서 생성되어야 합니다. 이는 공유 포인터의 올바른 작동을 보장하는 기술적 제한 사항입니다.

위 내용은 왜 `shared_from_this()`를 생성자에서 직접 사용할 수 없나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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