C++unique_ptr常量引用
-
23-12-2019 - |
题
我正在尝试使用unique_ptr将解决方案使用指针迁移到一个解决方案,以简化资源处理。我知道移动语义和使用 std::move()
要与unique_ptr的工作。
目前我有一个签名功能 int foo(const T2DMatrix* m)
我使用动态分配的2d矩阵对象来调用它。的功能 foo
只需要对T2DMatrix类的只读访问,因此需要const参数。现在,我已经把它迁移到 int foo(unique_ptr<const T2DMatrix>& m)
.来自不同的功能, process()
, ,其具有 unique_ptr<T2DMatrix>
对象(使用工厂函数创建),我想将对象作为参数传递给foo。但是,编译器不允许我这样做。请注意,我不想将对象的所有权从 process()
到 foo()
, ,因此使用引用。用一个 unique_ptr<const T2DMatrix>
工作正常,但是如果我更改函数签名,则不会强制执行const保证。
注:我发现的一个解决方案是创建一个新的 unique_ptr<const T2DMatrix>
object in 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
s如果函数无论如何都不关心所有权。