我怀疑boost::shared_ptr
。
我在析构函数中看到过这种情况( ptr 是一个boost :: shared_ptr):
ptr = boost::shared_ptr< int >( new int )
。
可以吗?不应该是ptr.reset()
,如此处所述:How to intentionally delete a boost::shared_ptr?
干杯!
答案 0 :(得分:4)
这取决于你之后想要用ptr做什么。
如果您需要重新分配它以指向新值,那么这就是代码的作用。如果您需要明确地使其无效,那么这就是reset()
的作用。如果它是一个将被析构函数隐式销毁的类成员,那么可能没有必要做任何事情,除非你有一些奇怪的销毁订单要求。
如果没有更多的背景,就不可能说哪个是正确的。
UPDATE:,因为你说这实际上不是在析构函数中,而是一个成员函数,意图让对象处于一个奇怪的半破坏状态,它取决于如何指定奇怪的状态。如果需要空指针,则重置它;如果它需要一个有效的指针,而不是之前共享的任何东西,那么重新分配它。更好的是,完全消除这种状态,使对象具有更强的有效性保证。
答案 1 :(得分:1)
ptr = boost::shared_ptr< int >( new int )
将通过在析构函数中调用boost::shared_ptr
构造函数来将内部值与您不想使用的新int交换。
ptr.reset()
会将内部值与任何内容交换,如您所链接的帖子中提到的更好