欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++学习笔记25,析构函数总是会宣布virtual

发布时间:2023/12/1 c/c++ 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++学习笔记25,析构函数总是会宣布virtual 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为了永远记住析构函数声明virtual----><<effective c++>>

为这句话不一定对,但无需质疑的是这句话是非常实用的.

查看以下的样例:

#include <iostream> #include <string> using namespace std; class B{ public:~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{D d;} }
这个是一个非常easy的样例,输出是肯定的.

可是,再看以下的測试!

#include <iostream> #include <string> using namespace std; class B{ public:~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{B *b=new D();delete b;} }

因此能够看到,当用一个基类的指针指向一个派生类的对象,直接删除该指针时,析构函数调用链将会遭到破坏.

#include <iostream> #include <string> using namespace std; class B{ public:virtual ~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:virtual ~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{B *b=new D();delete b;} }

因此应该记得将析构函数声明为virtual,这样就永远不用操心析构函数调用链的破坏!


版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4843521.html

总结

以上是生活随笔为你收集整理的C++学习笔记25,析构函数总是会宣布virtual的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。