#include <iostream>
using namespace std;
class c1 {};
class c2 : public c1 {};
class c3 : public c1 {};
class c4 : public c2, public c3 {};
int main() {
c4 *x1 = new c4;
c3 *x2 = x1;
delete x2; // segmentation fault
}
嗨,我想了解类型转换和继承,我发现这个问题。我有一个指向最派生的类,并指定(隐式)中间任何类,同时删除,我认为它应该能够删除第一个新分配的空间。在一些编译器中,它看起来很好,但在linux gcc 4.7.2版(Debian 4.7.2-5)中,它给出了分段错误。无法弄清楚,为什么?任何帮助/指针/建议将不胜感激。分段错误删除指针
注 - 类是以钻石问题的形式派生的。
你应该在c3中实现虚拟析构函数。 – Zefick
这不是钻石问题,因为没有虚拟继承。 c4类实际上有两个c1实例。 – Zefick
谢谢。我正在阅读更多关于虚拟析构函数的用法。 –