코드에서 boost:shared_ptr
을 광범위하게 사용하고 있습니다. 실제로 힙에 할당 된 대부분의 개체는 shared_ptr
에 의해 보관됩니다. 불행하게도 이것은 shared_ptr
을 취하는 모든 함수에 this
을 전달할 수 없다는 것을 의미합니다. 다음 코드를 고려하십시오.boost :: shared_ptr 받기 (
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
여기에는 두 가지 문제점이 있습니다. 첫째, shared_ptr
의 T * 생성자가 명시 적이기 때문에 컴파일되지 않습니다. 둘째로, 내가 강제로 bar(boost::shared_ptr<Foo>(this))
으로 빌드하도록 만들면 결국 두 번 삭제 될 수있는 객체에 대한 두 번째 공유 포인터가 생성됩니다.
이것은 제 질문에 대한 것입니다 : 당신이 알고있는 기존 공유 포인터의 사본을 얻기위한 표준 패턴이 그 객체 중 하나의 메소드 내부에서 존재합니까? 내 유일한 옵션을 여기에 집계하는 침입 참조를 사용하고 있습니까?
"침입 참조 여기 내 유일한 옵션을 계산을 사용하여 _Is _ "이 옵션의 문제점은 무엇입니까? – curiousguy
아무 것도 아닐 수도 있습니다. 상황에 따라 다릅니다. 그것은 당신의 객체를 더 크게 만들고 당신이 스마트 포인터를 유지하고있는 클래스를 제어 할 수없는 장소에서는 작동하지 않을 수 있습니다. –
enabe_shared_from_this는 이제'std ::'에 있습니다. 내 대답 좀 봐. –