【发布时间】:2017-03-05 08:08:15
【问题描述】:
我用一个对象初始化了一个 unique_ptr。因为我想将它的引用传递给函数并且不让函数更改对象内容,所以我必须将 unique_ptr<const MyObject>& 传递给它。但是 gcc 5.4 不允许我从 uinque_ptr<MyObject> 初始化 unique_ptr<const MyObject>&。
示例代码:
class Foo{public int x;};
unique_ptr<Foo> foo(new Foo());
foo->x = 5;
// User shouldn't be able to touch bar contents.
unique_ptr<const Foo>& bar = foo;
C++ 错误:
error: invalid initialization of reference of type ‘std::unique_ptr<const Foo>&’ from expression of type ‘std::unique_ptr<Foo>’
那么有什么合理的方法可以做到吗?
【问题讨论】:
-
您可以将来自
foo.get()的原始指针作为const Foo*提供给客户端。 -
如果一个函数无论如何都不允许修改对象,那么传递智能指针而不是常规指针的原因是什么?
-
@πάνταῥεῖ 如果我向用户提供常规 const 指针,他可以删除它。
-
@hamed1soleimani 如果有足够的决心,用户也可以从
unique_ptr中删除指针,所以这不是一个新问题。 -
@hamed1soleimani:C++ 防范墨菲,而不是马基雅维利。
标签: c++ c++11 gcc unique-ptr