#include <memory>
struct B;
struct A
{
std::shared_ptr<B> field1_;
A():field1_ (std::make_shared<B>()){}
};
template<class A>
struct B: std::enable_shared_from_this<B<A>>
{
A *field1_;
void stop()
{
delete field1_; //~= delete this
}
A* start()
{
field1_ = new A(shared_from_this());
return field1_;
}
};
int main()
{
A * reftoA = nullptr;
{
std::shared_ptr<B<A>> b = std::make_shared<B<A>>();
reftoA = b->start();
}
reftoAa->field1_->stop();
}
本番環境にバグがあり、上記のコードが HEAP を破損したり、未定義の動作につながる可能性があるかどうか疑問に思っています。
編集: 上記のコードを変更して、実際のコードに近づけました。