【C/C++】C++虚析构函数的作用
1、作用
为了在实现多态的时候不造成内存泄露,
如果基类析构函数前不加vitual,派生类对象被销毁后,只会调用基类的析构函数,而不会去调用派生类的析构函数。
2、对于正常的函数,如果基类中声明为virtual,则派生类可以不用再写virtual
// CPPTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class Base
{
public:
Base(){}
virtual ~Base()
{
printf("Base Destructor!\n");
}
virtual void Func()
{
printf("Base Func!\n");
}
private:
int m_iData;
};
class Derived : public Base
{
public:
Derived(){}
~Derived()
{
printf("Derived Destructor!\n");
}
void Func()
{
printf("Derived Func!\n");
}
};
class Derived2 : public Derived
{
public:
Derived2(){}
~Derived2()
{
printf("Derived2 Destructor!\n");
}
void Func()
{
printf("Derived2 Func!\n");
}
};
int main(int argc, char* argv[])
{
Base *pb = new Base;
pb->Func();
Base *pd = new Derived;
pd->Func();
Base *pd2 = new Derived2;
pd2->Func();
delete pb;
delete pd;
delete pd2;
return 0;
}
结果:
Base Func!
Derived Func!
Derived2 Func!
Base Destructor!
Derived Destructor!
Base Destructor!
Derived2 Destructor!
Derived Destructor!
Base Destructor!
相关文档:
最近有这么个需求,
c搞搞正则,
毕竟Regular Expression so强大^_^
标准的C和C+
+
都不支持正则表达式,但有一些函数库可以辅助C/
C+
+
程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-
Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。
编译正则表达式
为了提高效率,在将一个� ......
VC++中使用ADO方式操作ACCESS数据库
转载:http://www.programbbs.com/doc/3078.htm
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并� ......
前天晚上遇到一题,编写程序求出最大公因数(最大公约数),本能的我想起来了数学中求最大公因式的方法,可是在程序实践上
明显的出了问题,两个数要一个一个的进行拆解,然后找到相同的,这根本是一条死路,思索一夜醒来,突然迸发灵感,可以
用两个数进行取余运算,如果余数为零则最大公因数为被除数,不为零则余数为最 ......
工作后我仔细阅读了公司的3D引擎的源代码,这是款维护了十几年的引擎,主要运行在XBox, PS3和PC平台上。核心部分用C语言写,其他部分组件用C++编写。我以前很少用C语言编程(拜大学教育所赐),但读了太多这款引擎的代码深深的中了C语言的毒。C给我的感觉就是简单明了,要解决问题就是直接去解决它,绝不� ......
1、int 4字节
long 8字节
float 4字节
double 8字节
long double 16字节
2、一个字符变量只能存放一个字符、一个字节存放一个字节
char c;
c = 'a'; c = '\034' ......