C++ unique_ptr常量引用
我正尝试使用指向某个使用unique_ptr的指针来迁移解决方案,以简化资源处理。我知道移动语义以及使用std::move()
与unique_ptr一起使用。C++ 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>
调用foo()可以正常工作,但如果我更改函数签名,const保证不会被强制执行。
注:一个解决方案,我发现是创建进程的新unique_ptr<const T2DMatrix>
对象(),使用std::move()
从原来的unique_ptr<T2DMatrix>
对象将所有权转让给它,把它传递给foo(),并再次过程转移所有权( )。但这似乎不是理想的解决方案。
请建议等价的指针解决方案,它允许我将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常量引用 的全部内容, 来源链接: utcz.com/qa/266017.html