如何删除在cpp中的main中创建的对象

how to delete objects created in main in cpp

当我 运行 我得到代码时 "b fn 破坏b destruct a" 和 运行time 错误。问题是删除任何一个对象说 b 的对象调用 class a 的析构函数,所以当另一个 delete 尝试删除它命中的对象时 运行时间错误,所以有人好心建议,我们该如何解决这个问题?

#include <iostream>
using namespace std;
class a
{
    public:
    virtual void f(){cout<<"a fn"<<endl;};
    virtual ~a(){cout<<"destruct a"<<endl;};
};

class b: public a
{
    public:
    void f(){cout<<"b fn"<<endl;};
    ~b(){cout<<"destruct b"<<endl;};
};

int main() {
    class a *aa = new a;
    class b *bb = new b;
    aa = bb;

    aa->f();

    delete aa;
    delete bb;

    return 0;
}

您的程序行为未定义。

设置aa = bb;是灾难性的:

  1. 您将尝试删除同一个对象两次。这是未定义的行为。

  2. 你永远不会 delete 原来的 aa。那是内存泄漏。

删除那行,一切都会好起来的。如果你想测试多态性,那么你可以

class/*actually, not required*/ a *bb = new b;

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

两次删除同一个指针

删除这个

aa = bb;

你会得到输出

a fn
destruct a
destruct b
destruct a

成功