从unique_ptr初始化unique_ptr const引用

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)

有没有合理的方法呢?

Che*_*Alf 6

有两个问题:

  • 如何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)