具有复杂层次结构的decorator模式:导致核心转储的构造函数

decorator pattern with complex hierarchie: constructor causing core dump?

本文关键字:核心 构造函数 转储 模式 复杂 层次结构 decorator      更新时间:2023-10-16

我试图用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?

找到了答案:这是钻石问题的一个很好的例子。没有办法修复这个结构。

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