我知道为什么会发生这种情况,但我卡在了解决它的过程中……以下是我的代码在程序退出时生成错误(因此导致崩溃)时正在执行的操作...
纯虚方法被调用。
纯虚方法被调用。
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
我从未调用new SomeClass
,但我有一个QList<SomeClass*>
,我会将SomeClass*
对象附加到其中。在SomeClass
中的析构函数的目的是告诉DerivedClass
从其QList<SomeClass*>
集合中删除特定实例的SomeClass
。
因此,以下是一个具体示例...
BaseClass
= Shape
DerivedClass
= Triangle
SomeClass
= ShapeProperties
,它拥有对Shape
的引用
所以,我从未调用new ShapeProperties
,但我在Triangle
内部有一个QList<ShapeProperties*>
。在ShapeProperties
中的析构函数是为了告诉Triangle
从其QList<ShapeProperties*>
集合中删除ShapeProperties
的特定属性。
this
实例? - user869525SomePureVirtualMethod
需要在析构函数中被调用,则必须在实际定义您所需方法的类的析构函数中调用它。” - user869525SomePureVirtualMethod
方法时,不会解析到最终派生类的重载方法。如果你想调用最终派生类的重载方法,你必须在实现该重载方法的类的析构函数中调用它。 - K-balloSomeClass
中,而不是在BaseClass
或DerivedClass
中。SomeClass
拥有一个BaseClass
的实例,而DerivedClass
拥有一个SomeClass
的list
。SomeClass
中的析构函数需要从DerivedClass
内部的list
中删除一个SomeClass
实例。 - user869525