下面的代碼給出了預期的分段錯誤。從此指針創建共享指針
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'函數(提示:它會導致*未定義的行爲*)。 –