繁体   English   中英

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

[英]C++11 object composition with abstract classes

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

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

在...

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无法调用析构函数(自定义删除程序的规范浮现在脑海),但是直方图指向的值是const,这正是您真正想要的(我怀疑)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM