2

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

这是最好的方法吗?还有哪些其他方法以及我应该何时使用它们?

4

1 回答 1

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,这是你真正想要的(我怀疑)。

于 2013-10-15T04:15:40.420 回答