gpt4 book ai didi

c++ - 从 unique_ptr 初始化 unique_ptr const 引用

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:26 24 4
gpt4 key购买 nike

我用一个对象初始化了一个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;

C++ 错误:

error: invalid initialization of reference of type ‘std::unique_ptr<const Foo>&’ from expression of type ‘std::unique_ptr<Foo>’

那么有什么合理的做法吗?

最佳答案

有两个问题:

  • 如何constify unique_ptr 的指称。
  • 如何将非拥有指针传递给函数。

传递非拥有指针的合理方法是传递原始指针:

some_function( my_unique_ptr.get() );

或者如果它不能为 null 那么你可以取消引用指针并传递一个引用,

some_function( *my_unique_ptr )

这意味着凝固与主要问题几乎无关,但是,这也是如何做到这一点的:

unique_ptr<Foo>         p{ new Foo() };
unique_ptr<const Foo> q{ move( p ) }; // Moves ownership!

关于c++ - 从 unique_ptr 初始化 unique_ptr const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42606003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com