有什么方法可以防止用户明确地获得唯一指针的所有权
std::move
?
做了const
unique_ptr
移动构造函数采用非常量右值引用,因此不能用const
对象调用。
const unique_ptr<int> owner(new int);
// ...
unique_ptr<int> thief = std::move(owner); // ERROR
这允许unique_ptr
像使用boost::scoped_ptr
通过返回 a std::unique_ptr
,您已经放弃了对该对象的控制。新主人要么销毁它,要么把它交给其他人。
如果您不打算让用户释放该对象,则返回一个引用。
你有boost::scoped_ptr
/ const std::unique_ptr
(见乔纳森的回答),它在技术上回答了你的问题——调用者释放,但不能放弃资源——但我看不到一个令人信服的例子,说明你为什么需要这个而不是那个std::unique_ptr
或参考