使用shared_ptr构造的布局:
使用make_shared的布局:
如果两个shared_ptr指向同一个对象:
这里有一种错误的写法:
auto pw = new Widget; // pw是原始指针
…
std::shared_ptr<Widget> p(pw); // 为*pw创建控制块
…
std::shared_ptr<Widget> q(pw); // 为*pw创建第二个控制块
布局如下:
p和q指向同一个对象,它们本应该共享一个控制块,而上述这种错误写法导致它们各自维护一个控制块,而且引用计数是错误的,这会导致悬空指针问题