62

具有移动语义而仅仅是获取/重置智能指针的唯一区别boost::scoped_ptr<T>std::unique_ptr<T>事实是什么?std::unique_ptr<T>boost::scoped_ptr<T>

4

2 回答 2

51

不,但这是最重要的区别。

另一个主要区别是unique_ptr可以有一个析构函数对象,类似于how shared_ptrcan。与 不同shared_ptr,析构函数类型是unique_ptr's 类型的一部分(分配器是 STL 容器类型的一部分的方式)。

Aconst unique_ptr可以有效地完成大部分 A 可以做的scoped_ptr事情;实际上,与 不同scoped_ptr,aconst unique_ptr不能通过reset调用来反弹。

此外,unique_ptr<T>可以处理T不完整的类型。当您对可能调用删除器的任何操作执行任何操作时,默认删除器类型要求它T是完整的。unique_ptr因此,您可以根据情况自由地玩有关发生这种情况的游戏。

于 2011-11-20T06:13:18.173 回答
35

unique_ptr独占拥有一个对象。它是不可复制的,但支持所有权转移。它是作为现已弃用的auto_ptr.

scoped_ptr不可复制也不可移动。当您想确保在超出范围时删除指针时,这是首选。

于 2011-11-20T06:16:14.510 回答