码迷,mamicode.com
首页 > 其他好文 > 详细

[转载]析构函数的虚析构和非虚析构调用的差别

时间:2016-11-21 22:59:48      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:ima   pre   return   name   文件   int   images   src   code   

 

 

代码示例:

非虚析构的情况下.

#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中创建了一些资源,比如文件句柄、内存等,在这种情况下都得不到释放,从而导致资源泄漏。

[转载]析构函数的虚析构和非虚析构调用的差别

标签:ima   pre   return   name   文件   int   images   src   code   

原文地址:http://www.cnblogs.com/dsdr/p/6087115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!