具有复杂层次结构的装饰器模式:构造函数导致核心转储? 我尝试在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()));
还有其他类,如Sub,只是有其他名称。 现在我想能够写出这样的东西:具有复杂层次结构的装饰器模式:构造函数导致核心转储? 我尝试在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();
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
构造函数时构造它。然而,因为我看不到你在用指针做什么,所以我只能这样做了。