具有移动语义而仅仅是获取/重置智能指针的唯一区别boost::scoped_ptr<T>
和std::unique_ptr<T>
事实是什么?std::unique_ptr<T>
boost::scoped_ptr<T>
问问题
31967 次
2 回答
51
不,但这是最重要的区别。
另一个主要区别是unique_ptr
可以有一个析构函数对象,类似于how shared_ptr
can。与 不同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 回答