装饰模式与复杂的hierarchie:构造函数导致核心转储?

时间:2015-12-16 15:50:15

标签: c++ oop constructor segmentation-fault decorator

我尝试在C ++中实现复杂的装饰器。基本上我的代码的重要部分看起来像这样:

class Main {};
class Base : virtual public Main {};
class Deco : virtual public Main {
    Deco(Base* base);
};
class Sub : public Base, public Deco {
    Sub::Sub(Base* object) :
        Deco{object} {}
    Sub();
};

还有其他类,如Sub,只有其他名称。 现在我希望能够写出这样的东西:

Main* object = new Sub1(new Sub2(new Sub1()));

我不想在内部范围内创建新的Base,只需要Subs。 以下方法将导致分段错误:

Sub::Sub() :
    Deco{this} {}

我不知道为什么会这样。有没有办法解决这个问题或避免在这里初始化Deco?

1 个答案:

答案 0 :(得分:0)

找到答案:这是钻石问题的一个很好的例子。无法修复该构造。

必须用类Deco中的指针替换Base类。