【发布时间】:2014-03-30 14:55:33
【问题描述】:
我正在尝试使用指向 unique_ptr 的指针迁移解决方案,以简化资源处理。我知道移动语义和使用std::move() 来处理unique_ptr's。
目前我有一个签名为int foo(const T2DMatrix* m) 的函数,我使用动态分配的二维矩阵对象调用它。函数 foo 只需要对 T2DMatrix 类进行只读访问,因此需要 const 参数。现在,我已将其迁移到 int foo(unique_ptr<const T2DMatrix>& m)。从另一个函数process(),它有一个unique_ptr<T2DMatrix> 对象(使用工厂函数创建),我想将该对象作为参数传递给foo。但是,编译器不允许我这样做。请注意,我不想将对象的所有权从process() 转移到foo(),因此使用引用。使用 unique_ptr<const T2DMatrix> 调用 foo() 可以正常工作,但是如果我更改函数签名,则不会强制执行 const 保证。
注意:我发现的一种解决方案是在 process() 中创建一个新的 unique_ptr<const T2DMatrix> 对象,使用 std::move() 将所有权从原始 unique_ptr<T2DMatrix> 对象转移给它,然后将其传递给 foo(),然后再一次在 process() 中转移所有权。但这似乎不是理想的解决方案。
请建议等效的指针解决方案,它允许我将 T2DMatrix* 参数传递给 const T2DMatrix* 参数。我试过用msvc2012、msvc2013和g++4.8,结果都一样。
【问题讨论】:
-
您的函数是否对
unique_ptr有任何作用?还是只关注指向的对象? -
foo() 只关注指向的对象...您正在按照下面的 ComicsansMS 思路进行思考...这个想法是有道理的。对于 foo 参数,我应该只使用引用而不是 unique_ptr。谢谢。
标签: c++ pointers c++11 constants unique-ptr