Ank*_*ria 8 c++ pointers const unique-ptr c++11
我正在尝试使用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(),因此使用引用.调用foo()时unique_ptr<const T2DMatrix>工作正常,但是如果我更改函数签名则不会强制执行const保证.
注意:我发现的一个解决方案是unique_ptr<const T2DMatrix>在process()中创建一个新对象,unique_ptr<T2DMatrix>使用原始对象将所有权转移给它std::move(),将其传递给foo(),然后再次在process()中转移所有权.但这似乎不是理想的解决方案.
请建议等效的指针解决方案,它允许我将T2DMatrix*参数传递给const T2DMatrix*参数.我尝试使用msvc2012,msvc2013和g ++ 4.8,都具有相同的结果.
Com*_*sMS 19
如果函数不需要所有权,则传递普通引用而不是引用unique_ptr:
int foo(T2DMatrix const& m);
std::unique_ptr<T2DMatrix> matrixptr;
[...]
foo(*matrixptr);
Run Code Online (Sandbox Code Playgroud)
有没有必要人为地限制foo于unique_ptr■如果功能不关心所有权反正.
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |