下面的代码给出了预期的分段错误。从此指针创建共享指针
struct B{
shared_ptr<B> createShared(){ return shared_ptr<B>(this);}
};
int main()
{
shared_ptr<B> p1 = make_shared<B>();
shared_ptr<B> p2 = p1->createShared();
return 0;
}
但是当我改变代码
shared_ptr<B> p1 = make_shared<B>();
to
shared_ptr<B> p1(new B);
程序编译,没有任何崩溃运行。
有人可以解释我究竟究竟是什么导致了这两种情况之间的行为改变。
注意: -我知道这不是从这个指针创建共享指针的正确方法,我所寻找的是这两种情况之间行为改变的原因。我使用的编译器是clang ++ - 3.8和g ++ - 5.4。
您应该阅读['std :: enable_shared_from_this'](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this)。这个引用也解释了代码中会发生什么,比如你的'createShared'函数(提示:它会导致*未定义的行为*)。 –