3

有什么方法可以防止用户明确地获得唯一指针的所有权

 std::move

?

4

2 回答 2

8

做了const

unique_ptr移动构造函数采用非常右值引用,因此不能用const对象调用。

const unique_ptr<int> owner(new int);
// ...
unique_ptr<int> thief = std::move(owner);  // ERROR

这允许unique_ptr像使用boost::scoped_ptr

于 2013-03-09T00:22:55.260 回答
5

通过返回 a std::unique_ptr,您已经放弃了对该对象的控制。新主人要么销毁它,要么把它交给其他人。

如果您不打算让用户释放该对象,则返回一个引用。

你有boost::scoped_ptr/ const std::unique_ptr(见乔纳森的回答),它在技术上回答了你的问题——调用者释放,但不能放弃资源——但我看不到一个令人信服的例子,说明你为什么需要这个而不是那个std::unique_ptr或参考

于 2013-03-08T21:03:01.457 回答