ham*_*ani 1 c++ gcc unique-ptr c++11
我用Object初始化了一个unique_ptr.因为我想将它的引用传递给函数并且不让函数更改对象内容,所以我必须传递unique_ptr<const MyObject>&给它.但是GCC 5.4不让我初始化unique_ptr<const MyObject>&的uinque_ptr<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;
Run Code Online (Sandbox Code Playgroud)
C++错误:
error: invalid initialization of reference of type ‘std::unique_ptr<const Foo>&’ from expression of type ‘std::unique_ptr<Foo>’
Run Code Online (Sandbox Code Playgroud)
有没有合理的方法呢?
有两个问题:
constify指称一个unique_ptr.传递非拥有指针的合理方法是传递原始指针:
some_function( my_unique_ptr.get() );
Run Code Online (Sandbox Code Playgroud)
或者,如果它不能为null,那么您可以取消引用指针并传递引用,
some_function( *my_unique_ptr )
Run Code Online (Sandbox Code Playgroud)
这意味着认可与主要问题几乎无关,但仍然是,如何做到这一点:
unique_ptr<Foo> p{ new Foo() };
unique_ptr<const Foo> q{ move( p ) }; // Moves ownership!
Run Code Online (Sandbox Code Playgroud)