【发布时间】:2013-10-15 02:46:42
【问题描述】:
假设我有一个类 Foo,它具有抽象类 Bar 的 const 成员,在构造函数中传递 Bar 以初始化 const 成员的正确方法是什么?
class Foo
{
public:
Foo(?Bar? bar): bar(?bar?) {};
private:
const ?Bar? bar;
}
在 C++11 中,我想像这样使用 std::unique_ptr:
class Foo
{
public:
Foo(std::unique_ptr<Bar> &bar): bar(std::move(bar)) {};
private:
const std::unique_ptr<Bar> bar;
}
这是最好的方法吗?还有哪些其他方法以及我应该何时使用它们?
【问题讨论】:
-
看来
const Bar*会起作用,对吧?关于使用std::unique_ptr的原因有什么想法吗? -
我看不出有什么问题(我不会使用引用,因为它已经是一个“指针”)。您预计会遇到什么问题,或者遇到了什么问题?
-
如果您要选择
std::unique_ptr,我发现如果您按价值来论证会更好。它将使您能够传递临时对象,对于非临时对象,用户代码必须显式地std::move参数,从而更清楚地表明您的构造函数正在窃取std::unique_ptr的内容 -
我认为通过右值引用传递
std::unique_ptr更好。但是,如果您要从中获取move,则绝对不应该通过非常量左值引用来获取它。