#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 或导致未定义的行为。
编辑:我已将上面的代码更改为更接近我的真实代码。