删除速推::shared_ptr的内容

Deleting content of a boost::shared_ptr

本文关键字:ptr shared 删除      更新时间:2023-10-16

我对boost::shared_ptr有疑问。

我已经在析构函数中看到了这一点(ptr 是一个提升::shared_ptr): ptr = boost::shared_ptr< int >( new int ) .

可以吗?不应该是ptr.reset(),就像这里所说的那样:如何故意删除提升::shared_ptr?

干杯!。

这取决于你之后想用 ptr 做什么。

如果您需要重新分配它以指向新值,那么这就是代码的作用。如果您需要显式使其无效,那么这就是reset()所做的。如果它是一个将被析构函数隐式销毁的类成员,那么可能不需要做任何事情,除非你有一些奇怪的销毁顺序要求。

没有更多的上下文,就不可能说哪个是正确的。

更新:由于您说这实际上不是析构函数,而是一个成员函数,旨在使对象处于奇怪的半销毁状态,这取决于如何指定该奇怪状态。如果它需要一个空指针,则重置它;如果它需要一个有效的指针,但不需要指向以前共享的任何内容,则重新分配它。更好的是,完全消除此状态,为对象提供更强的有效性保证。

ptr = boost::shared_ptr< int >( new int ) 将通过调用 boost::shared_ptr 构造函数将内部值交换为您不想使用的新 int...在他的析构函数中。

ptr.reset()将交换内部值,最好如您链接的帖子中所述