之前写了一个C++的程序,类似于是这样的框架:
#include<iostream>
using namespace std;
class BaseClass{
public:
virtual void output(){
cout<<"BaseClass"<<endl;
}
};
class DerivedClass:public BaseClass{
public:
virtual void output(){
cout<<"DerivedClass"<<endl;
}
};
int main(){
BaseClass *p=new DerivedClass();
p->output();
delete p;
return 0;
}
在编译过程中遇到了这样的一个警告:Warning: deleting object of polymorphic class type 'BaseClass' which has non-vitrual destructor might cause undefined behaviour。
简单来说,就是我新建了一个子类对象,用基类指针指向这个子类对象,对于基类对象进行delete操作的时候产生的这个警告。它的意思是BaseClas是一个多态类,但是它的析构函数不是虚函数,有可能程序会造成undefined behaviour。
那么什么是undefined behaviour?举个例子来说,如果我们的程序中,DerivedClass对象申请了内存空间,并且在DerivedClass的析构函数中释放内存空间,但是基类和子类的析构函数并不是虚函数,运行上面的程序,基类指针指向子类对象,