构造函数与析构函数
学习编程已快三年,前段时间一直好高鹜远,老想着做一些很牛B的东西。经过两三个项目后,老觉得很飘,没有一种脚踏实地的感觉。现在只想好好地补补基础知识,一切从今天开始。学习的东西记录到这里,方便以后重温。
类的构造与析构应该是最基础的东西了,可是现在对一些概念还不是很清晰,写了几段代码,证明一下。
首选定义一个类CParent(以后学习继承还有这个类,所以类名定义成这样),定义如下:
class CParent { public: CParent(void); ~CParent(void); };
很简单的一个类,只有一个构造函数与一个析构函数,两个函数的实现如下:
CParent::CParent(void) { cout<<"run constructor of CParent"<<endl; } CParent::~CParent(void) { cout<<"run destructor of CParent"<<endl; }
建立一个控制台win32程序,实现main函数如下:
#include<iostream> using namespace std; #include"Parent.h" int main() { cout<<"Begin of main function"<<endl; cout<<"End of main function"<<endl; return 0; }
在不同地方实例化CParent类,看下构造函数与析构函数何时执行。
首先在main函数中建立CParent类
int main() { cout<<"Begin of main function"<<endl; CParent Object; cout<<"End of main function"<<endl; return 0; }
程序运行结果如下:
Begin of main function run constructor of CParent End of main function run destructor of CParent
可以看出,构造函数在main内部创建对象时执行,析构函数要等到main函数结束自动执行。
下面看看在其它函数内部创建CParent对象时,又是什么情况
新添一个函数FuncA(),同时修改main函数,代码如下。
void FuncA() { cout<<"Begin of FuncA"<<endl; CParent Object; cout<<"End of FuncA"<<endl; } int main() { cout<<"Begin of main function"<<endl; FuncA(); cout<<"End of main function"<<endl; return 0; }
程序运行结果如下:
Begin of main function Begin of FuncA run constructor of CParent End of FuncA run destructor of CParent End of main function
构造函数创建对象时执行,析构函数在FuncA结束后,返回main函数之前执行。
如果是定义一个全局变量的对象呢?代码如下:
CParent object; int main() { cout<<"Begin of main function"<<endl; cout<<"End of main function"<<endl; return 0; }
运行结果:
run constructor of CParent Begin of main function End of main function run destructor of CParent
如果是用new呢?
int main() { cout<<"Begin of main function"<<endl; CParent *p=new CParent(); cout<<"End of main function"<<endl; return 0; }
运行结果:
Begin of main function run constructor of CParent End of main function