析构函数的虚析构和非虚析构调用的差别
Posted 德克斯特的实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了析构函数的虚析构和非虚析构调用的差别相关的知识,希望对你有一定的参考价值。
代码示例:
非虚析构的情况下.
#include <stdio.h> #include <iostream> using namespace std; class A { public: A() { std::cout << "A is created." << std::endl; } ~A() { std::cout << "A is deleted." << std::endl; } }; class B : public A { public: B() { std::cout << "B is created." << std::endl; } ~B() { std::cout << "B is deleted." << std::endl; } }; int main() { A* pA = new B(); delete pA; return 0; }
虚析构的情况下.
#include <stdio.h> #include <iostream> using namespace std; class A { public: A() { std::cout << "A is created." << std::endl; } virtual ~A() { std::cout << "A is deleted." << std::endl; } }; class B : public A { public: B() { std::cout << "B is created." << std::endl; } ~B() { std::cout << "B is deleted." << std::endl; } }; int main() { A* pA = new B(); delete pA; return 0; }
如果在类型B中创建了一些资源,比如文件句柄、内存等,在这种情况下都得不到释放,从而导致资源泄漏。
以上是关于析构函数的虚析构和非虚析构调用的差别的主要内容,如果未能解决你的问题,请参考以下文章