我只知道std::enable_shared_from_this
这个链接。
但是看了下面的代码,不知道什么时候用。
try {
Good not_so_good;
std::shared_ptr<Good> gp1 = not_so_good.getptr();
} catch(std::bad_weak_ptr& e) {
// undefined behavior (until C++17) and std::bad_weak_ptr thrown (since C++17)
std::cout << e.what() << '\n';
}
上面的代码“不太好”,因为shared_ptr
在调用getptr()
. 所以好的应该是:
std::shared_ptr<Good> gp1 = std::make_shared<Good>(); // having a shared_ptr at the beginning
std::shared_ptr<Good> gp2 = gp1->getptr();
但是,如果我已经有一个shared_ptr
对象,为什么不简单地编写这样的代码:std::shared_ptr<Good> gp2 = gp1;
,这意味着我根本不需要std::enable_shared_from_this
。
在我看来,使用std::enable_shared_from_this
是为了确保多个shared_ptr
对象具有相同的控制块,这样我们就可以避免双重删除问题。但是如果我必须shared_ptr
在开始时提醒自己创建一个,为什么我不提醒自己使用shared_ptr
对象来创建一个新对象,而不是使用原始指针呢?