具有复杂层次结构的装饰器模式:构造函数导致核心转储? 我尝试在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(); }; Main* object = new Sub1(new Sub2(new Sub1()));

具有复杂层次结构的装饰器模式:构造函数导致核心转储? 我尝试在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(); }; Main* object = new Sub1(new Sub2(new Sub1()));,c++,oop,constructor,segmentation-fault,decorator,C++,Oop,Constructor,Segmentation Fault,Decorator,还有其他类,如Sub,只是有其他名称。 现在我想能够写出这样的东西: 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,只是有其他名称。 现在我想能够写出这样的东西:

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();
};
Main* object = new Sub1(new Sub2(new Sub1()));
我不想在内部范围内创建一个新的基础,只是Subs。 以下方法将导致分段错误:

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

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

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


必须用class
Base

中的指针替换
Deco
类,您是否正在对该指针执行
delete
?你在复制/移动
子对象吗?我必须在某个地方使用
删除
,是的,我认为这里没有足够的代码供我们编译和查看。您可能没有在代码段中显示实际的错误。是否可以使用
this
以我的方式初始化基类?您可以传递指针值,是的。甚至应该在将
Base
子对象传递给
Deco
构造函数时构造它。然而,因为我看不到你在用指针做什么,所以我只能这样做了。