删除boost :: shared_ptr的内容

时间:2012-12-14 09:50:29

标签: c++ shared-ptr

我怀疑boost::shared_ptr

我在析构函数中看到过这种情况( ptr 是一个boost :: shared_ptr): ptr = boost::shared_ptr< int >( new int )

可以吗?不应该是ptr.reset(),如此处所述:How to intentionally delete a boost::shared_ptr?

干杯!

2 个答案:

答案 0 :(得分:4)

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

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

如果没有更多的背景,就不可能说哪个是正确的。

UPDATE:,因为你说这实际上不是在析构函数中,而是一个成员函数,意图让对象处于一个奇怪的半破坏状态,它取决于如何指定奇怪的状态。如果需要空指针,则重置它;如果它需要一个有效的指针,而不是之前共享的任何东西,那么重新分配它。更好的是,完全消除这种状态,使对象具有更强的有效性保证。

答案 1 :(得分:1)

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

ptr.reset()会将内部值与任何内容交换,如您所链接的帖子中提到的更好