首页 > 代码库 > C++中虚析构函数的作用
C++中虚析构函数的作用
在c++的类中虚析构函数一直不知道它有什么作用,等到今天来看才发现加virtual 和不加的区别特别大。
#include<iostream> using namespace std; class Parent { protected: public: Parent() {;} //virtual ~Parent() ~Parent() { cout<<"~Psrent\n"; } virtual void print() { cout<<"p我仅仅是一个被调用的试验品、n\n"; } }; class Child:public Parent { protected: public: Child() {;} ~Child() { cout<<"child ~\n"; } virtual void print() { cout<<"c我仅仅是一个被调用的试验品、n\n"; } }; void objplay() { Child c1; } void objplay2() { Parent *p1=new Parent; delete p1; } void objplay3() { Parent *p2=new Child; p2->print();//这里会造成多太。没成想开辟的child的内存空间,就是child的类型了, //就要用child的print,如果不加vitrual,则直接用父类的 delete p2;//这里父类的析构函数不加virtual的话,就只会析构p2的类型,父类的析构函数,但是本身调用子类了, //所以这就造成了内存的泄漏,父类的析构函数必须为虚函数 } int main() { cout<<"objplay:\n"; objplay(); cout<<"\nobjplay2:\n"; objplay2(); cout<<"\nobjplay3:\n"; objplay3(); system("pause"); }
结果显示为:
在加上virtual后就变成了这样:
C++中虚析构函数的作用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。