当我运行代码时,我得到" b fn 破坏b 破坏一个"和运行时错误。问题是删除任何一个对象说b的对象调用类a的析构函数,所以当其他删除尝试删除对象时它会遇到运行时错误,所以任何人都建议,我们如何解决这个问题?
currentProduct
答案 0 :(得分:4)
您的程序行为未定义。
设置aa = bb;
是灾难性的:
您将尝试两次删除同一个对象。这是未定义的行为。
您永远不会delete
原始aa
。这是内存泄漏。
删除该行,一切都会好的。如果你想测试多态性,那么你可以写
class/*actually, not required*/ a *bb = new b;
答案 1 :(得分:1)
使用
class a *aa = new a;
class b *bb = new b;
aa = bb;
您不再引用new a
所以
delete aa; // delete 'new b'
delete bb; // delete 'new b' a second time
双删除相同的指针。
答案 2 :(得分:0)
删除此
aa = bb;
您将获得输出
a fn
destruct a
destruct b
destruct a
成功