class变量的构造函数的函数名与类名相同,定义class变量时自动执行
class变量的析构函数的函数名与类名前加“~”,对象超出定义范围时自动执行
//构造函数和析构函数示例
#include<stdio.h> class X{ int i; public: X(); //构造函数 ~X(); //析构函数 F(); }; X::X(){ printf("run X::X()\n"); } X::~X(){ printf("run X::~X()\n"); } X::F(){ printf("run X::F()\n"); } int main(){ X a; //在定义变量a时自动执行 构造函数X() //! a.X(); //不能主动调用构造函数 a.~X(); //可主动调用析构函数 a.F(); //正常函数 return 0; //程序结束后,自动调用析构函数 }
以上代码执行结果见下
定义一个对象时,自动调用了构造函数;程序结束时,自动调用析构函数;构造函数无法被外部调用,但析构函数可以。
/当对象超出它的定义范围时,编译器自动调用析构函数 //:CONSTR1.CPP-Constructors & destructors #include<stdio.h> class tree{ int height; public: tree(int initialHeight); ~tree(); void grow(int years); void printsize(); }; tree::tree(int initialHeight){ height=initialHeight; } tree::~tree(){ puts("inside tree destructors"); printsize(); } void tree::grow(int years){ height+=years; } void tree::printsize(){ printf("tree height is %d\n",heght); } main(){ puts("before opening brace"); { tree t(12); put("after tree creation"); t.printsize(); t.grow(4); puts("before closing brace"); } puts("after closing brace"); } //:CONSTR1.CPP-Constructors & destructors #include<stdio.h> class tree{ int height; public: tree(int initialHeight); ~tree(); void grow(int years); void printsize(); }; tree::tree(int initialHeight){ height=initialHeight; } tree::~tree(){ puts("inside tree destructors"); printsize(); } void tree::grow(int years){ height+=years; } void tree::printsize(){ printf("tree height is %d\n",height); } main(){ puts("before opening brace"); { tree t(12); puts("after tree creation"); t.printsize(); t.grow(4); puts("before closing brace"); } puts("after closing brace"); }
执行结果:
这段代码的对象在“{}”内定义,其生存周期是在这个花括号内,当回收这个变量时自动执行析构函数。