У меня определен класс, подобный следующему:
class A : std::enable_shared_from_this<A> {
public:
static std::shared_ptr<A> create() {
return std::shared_ptr<A>(new A());
}
void f() {
shared_from_this();
}
private:
A() { }
};
и используется аналогично:
std::shared_ptr<A> pt = A::create();
pt->f();
Несмотря на то, что вызов shared_from_this () вызывается после создания shared_ptr pt
, вызов f()
по-прежнему приводит к возникновению исключения bad_weak_ptr
. Запуск его в gdb
подтверждает, что исключение выдается при вызове f()
, а не в каком-то коде, который я здесь не включил и который вызывается инструктором.