gpt4 book ai didi

C++ unique_ptr 常量引用

转载 作者:可可西里 更新时间:2023-11-01 18:09:00 27 4
gpt4 key购买 nike

我正在尝试使用指向使用 unique_ptr 的指针来迁移解决方案,以简化资源处理。我知道移动语义和 std::move() 的使用与 unique_ptr 一起工作。

目前我有一个签名为 int foo(const T2DMatrix* m) 的函数我使用动态分配的 2D-Matrix 对象来调用它。函数foo只需要对 T2DMatrix 类进行只读访问,因此需要 const 参数。现在,我已将其迁移到 int foo(unique_ptr<const T2DMatrix>& m) .来自不同的功能,process() , 它有一个 unique_ptr<T2DMatrix>对象(使用工厂函数创建),我想将对象作为参数传递给 foo。但是,编译器不允许我这样做。请注意,我不想从 process() 转移对象的所有权至 foo() ,因此使用引用。使用 unique_ptr<const T2DMatrix> 调用 foo()工作正常,但是如果我更改函数签名,则不会强制执行 const 保证。

注意:我找到的一个解决方案是创建一个新的 unique_ptr<const T2DMatrix> process() 中的对象,将所有权从原始 unique_ptr<T2DMatrix> 转移给它对象使用 std::move() ,将其传递给 foo(),并再次在 process() 中转移所有权。但这似乎不是理想的解决方案。

请建议允许我将 T2DMatrix* 参数传递给 const T2DMatrix* 参数的指针解决方案的等价物。我尝试使用 msvc2012、msvc2013 和 g++4.8,结果都一样。

最佳答案

如果函数不需要所有权,则传递一个普通引用而不是对 unique_ptr 的引用:

int foo(T2DMatrix const& m);


std::unique_ptr<T2DMatrix> matrixptr;
[...]
foo(*matrixptr);

如果函数不关心所有权,则无需人为地将 foo 限制为 unique_ptr

关于C++ unique_ptr 常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064103/

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