一个关于虚拟析构函数测试
2006-01-16 16:58
471 查看
#include "stdafx.h"
#include <iostream>
using namespace std;
class BaseClass
{
public:
BaseClass()
{
++nAllClassNum;
}
// virtual ~BaseClass()
// {
// --nAllClassNum;
// }
~BaseClass()
{
--nAllClassNum;
}
static int nunAllClass()
{
return nAllClassNum;
}
private:
static int nAllClassNum;//所有类的引用计数
};
class DeriveClass:public BaseClass
{
public:
DeriveClass()
{
++nDeriveClassNum;
}
~DeriveClass()
{
--nDeriveClassNum;
}
static int nunDevireClass()
{
return nDeriveClassNum;
}
private:
static int nDeriveClassNum;//派生类引用计数
};
int BaseClass::nAllClassNum=0;
int DeriveClass::nDeriveClassNum=0;
int main()
{
cout<<"一般测试:"<<endl;
BaseClass a;
cout<<"BaseClass a;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
BaseClass b;
cout<<"BaseClass b;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
BaseClass c;
cout<<"BaseClass c;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
DeriveClass d;
cout<<"DeriveClass d;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
cout<<"DeriveClass d;->"<<"基派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
cout<<"==============================================================="<<endl<<endl;
cout<<"基类指针测试:"<<endl;
cout<<"新建一个指向派生类的基类指针:"<<endl<<"BaseClass* pDeriveClass=new DeriveClass;"<<endl;
BaseClass* pDeriveClass=new DeriveClass;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<endl;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
delete pDeriveClass;
pDeriveClass=NULL;
cout<<"删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用"<<endl<<"delete pDeriveClass;"<<endl;;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<endl;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
cout<<"===================Test Over==============="<<endl;
return 0;
}
运行结果:一般测试:
BaseClass a;->基类对象的数目:1
BaseClass b;->基类对象的数目:2
BaseClass c;->基类对象的数目:3
DeriveClass d;->基类对象的数目:4
DeriveClass d;->基派生类对象的数目:1
===============================================================
基类指针测试:
新建一个指向派生类的基类指针:
BaseClass* pDeriveClass=new DeriveClass;
目前基类对象的数目 :5
目前派生类对象的数目:2
删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用
delete pDeriveClass;
目前基类对象的数目 :4
目前派生类对象的数目:2
===================Test Over===============
而把构造函数定义为虚拟函数
则运行结果为
一般测试:
BaseClass a;->基类对象的数目:1
BaseClass b;->基类对象的数目:2
BaseClass c;->基类对象的数目:3
DeriveClass d;->基类对象的数目:4
DeriveClass d;->基派生类对象的数目:1
===============================================================
基类指针测试:
新建一个指向派生类的基类指针:
BaseClass* pDeriveClass=new DeriveClass;
目前基类对象的数目 :5
目前派生类对象的数目:2
删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用
delete pDeriveClass;
目前基类对象的数目 :4
目前派生类对象的数目:1
===================Test Over===============
#include <iostream>
using namespace std;
class BaseClass
{
public:
BaseClass()
{
++nAllClassNum;
}
// virtual ~BaseClass()
// {
// --nAllClassNum;
// }
~BaseClass()
{
--nAllClassNum;
}
static int nunAllClass()
{
return nAllClassNum;
}
private:
static int nAllClassNum;//所有类的引用计数
};
class DeriveClass:public BaseClass
{
public:
DeriveClass()
{
++nDeriveClassNum;
}
~DeriveClass()
{
--nDeriveClassNum;
}
static int nunDevireClass()
{
return nDeriveClassNum;
}
private:
static int nDeriveClassNum;//派生类引用计数
};
int BaseClass::nAllClassNum=0;
int DeriveClass::nDeriveClassNum=0;
int main()
{
cout<<"一般测试:"<<endl;
BaseClass a;
cout<<"BaseClass a;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
BaseClass b;
cout<<"BaseClass b;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
BaseClass c;
cout<<"BaseClass c;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
DeriveClass d;
cout<<"DeriveClass d;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<endl;
cout<<"DeriveClass d;->"<<"基派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
cout<<"==============================================================="<<endl<<endl;
cout<<"基类指针测试:"<<endl;
cout<<"新建一个指向派生类的基类指针:"<<endl<<"BaseClass* pDeriveClass=new DeriveClass;"<<endl;
BaseClass* pDeriveClass=new DeriveClass;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<endl;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
delete pDeriveClass;
pDeriveClass=NULL;
cout<<"删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用"<<endl<<"delete pDeriveClass;"<<endl;;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<endl;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<endl;
cout<<"===================Test Over==============="<<endl;
return 0;
}
运行结果:一般测试:
BaseClass a;->基类对象的数目:1
BaseClass b;->基类对象的数目:2
BaseClass c;->基类对象的数目:3
DeriveClass d;->基类对象的数目:4
DeriveClass d;->基派生类对象的数目:1
===============================================================
基类指针测试:
新建一个指向派生类的基类指针:
BaseClass* pDeriveClass=new DeriveClass;
目前基类对象的数目 :5
目前派生类对象的数目:2
删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用
delete pDeriveClass;
目前基类对象的数目 :4
目前派生类对象的数目:2
===================Test Over===============
而把构造函数定义为虚拟函数
则运行结果为
一般测试:
BaseClass a;->基类对象的数目:1
BaseClass b;->基类对象的数目:2
BaseClass c;->基类对象的数目:3
DeriveClass d;->基类对象的数目:4
DeriveClass d;->基派生类对象的数目:1
===============================================================
基类指针测试:
新建一个指向派生类的基类指针:
BaseClass* pDeriveClass=new DeriveClass;
目前基类对象的数目 :5
目前派生类对象的数目:2
删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用
delete pDeriveClass;
目前基类对象的数目 :4
目前派生类对象的数目:1
===================Test Over===============
相关文章推荐
- 关于linux下测试一个端口是否通
- [转]一个关于三角形的测试用例设计
- 关于windows下c/c++的rand()的一个测试
- 关于虚继承和析构函数的一个奇怪的问题
- 关于SQL主键用int还是varchar类型的一个小测试
- 转贴一个关于Junit测试Android开发的
- 一个关于extern"C"下函数指针行为的测试用例
- 关于github上一个可拓展和折叠的测试demo源码详解
- 关于默认构造函数、复制构造函数、析构函数、赋值操作的各种测试探索
- 【摘取】敏捷测试,用户故事:一个关于“货物送达时间”的故事的评估实例
- 开始做一个优秀的软件测试工程师----------我收集的网友的资料关于DEFECT LIFE CYCLE
- 关于搭建一个高性能网站的服务器的架设思路以及nginx测试的并发
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- 对一个安全设置比较BT的虚拟主机的安全测试
- 一个简单关于学生成绩管理的C++程序代码,但是对于拷贝析构函数目前还是不知其作用何在
- 一个很好的blog地址,关于手机测试(appium\ Robotium等 )
- 一个关于C语言指针的测试
- 关于SQL主键用int还是varchar类型的一个小测试
- 关于PreparedStatement接口的一个测试
- 关于二级指针的使用测试小例子,仅供测试--参数传递的时候用指针最好,因为压栈的时候指针,只是压入一个地址的值,最多4个字节(32位机上),提供的3个测试例子,基于VC6.0的环境。