带有抽象类的C ++ 11对象组合

时间:2013-10-15 02:46:42

标签: c++ c++11

假设我有一个类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;
}

这是最好的方法吗?我还应该使用它们的其他方式是什么?

1 个答案:

答案 0 :(得分:0)

在...

struct Foo
{
public:
    Foo(std::unique_ptr<Bar> &bar): bar(std::move(bar)) {};
    const std::unique_ptr<Bar> bar;
};

... bar(指针)不可修改,但其值为。

这是你想要的吗?

我宁愿想:

class Foo
{
public:
    Foo(std::unique_ptr<const Bar>& bar): bar(std::move(bar)) {}

private
    std::unique_ptr<const Bar> bar;
};

会更合适,因为价值不是真正恒定的。我怀疑这不会编译,因为unique_ptr不能调用析构函数(自定义删除器弹簧的规范),但是bar指向的值是const,这是你真正想要的(我怀疑)。