#include <memory>
#include <iostream>
struct A : public std::enable_shared_from_this<A>
{
~A()
{
auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here.
std::cout << "this: " << this_ptr;
}
};
int main()
{
auto a = std::make_shared<A>();
a.reset();
return 0;
}
shared_from_this()
을 호출 할 때 std::bad_weak_ptr
예외가 발생합니다. 그것은 설계에 의한 것인가? 그렇습니다. 소멸자가 반환 된 후에는이 포인터를 사용할 수 없으므로 위험 할 수 있습니다. 그러나 공유 포인터 객체가 아직 존재하고 있기 때문에 포인터를 가져 오는 것이 기술적으로 불가능한 이유는 없습니다. 익숙한. 내 자신의 enable_shared_from_this
아날로그 (필자는 그렇게하지 않을 것)를 작성하는 것만 큼이 방법을 사용할 수 있습니까?std :: enable_shared_from_this : 소멸자에서 shared_from_this()를 호출 할 수 있습니까?
http://stackoverflow.com/q/8501503/1147772 – Drax
@Drax : 그 질문을 보았습니다. 'std'가 아니라 'boost'에 관한 것이고, 그 대답은'shared_from_this()'가용성에 대한 주요 제한 사항이 아니라 문제의 코드의 특정 디자인에 관한 것입니다. –
@VioletGiraffe 질문은 '부스트'도 아니고 '표준'도 아니며, 약한 레퍼런스의 개념에 불과합니다. – curiousguy