读程序:
1
#include<iostream>
2
using namespace std;
3
int cn=0;
4
5
class myCla
6
{
7
char cc;
8
public:
9
myCla(char ch)
10
{
11
++cn;
12
cc=ch;
13
cout<<"constructor:cn="<<cn<<",ch="<<ch<<endl;
14
}
15
~myCla()
16
{
17
--cn;
18
cout<<"destructor:cn="<<cn<<",cc="<<getcc()<<endl;
19
}
20
char getcc()
21
{
22
return cc;
23
}
24
};
25
myCla globalG('G');
26
int main()
27
{
28
myCla autoA('A');
29
for(int i=0;i<2;++i)
30
{
31
cout<<"---begin block"<<endl;
32
myCla autoB('B');
33
static myCla static5('S');
34
cout<<"---end block"<<endl;
35
}
36
cout<<"---end main"<<endl;
37
return 0;
38
}
39
运行结果为:
constructor:cn=1,ch=G
constructor:cn=2,ch=A
---begin block
constructor:cn=3,ch=B
constructor:cn=4,ch=S
---end block
destructor:cn=3,cc=B
---begin block
constructor:cn=4,ch=B
---end block
destructor:cn=3,cc=B
---end main
destructor:cn=2,ch=A
destructor:cn=1,ch=S
destructor:cn=0,ch=G

结果分析:
(1)类的构造函数与析构函数都是特殊的类成员函数。构造函数主要完成对象的初始化工作,而析构函数主要完成对象
撤销前的善后工作。形象地说,当对象诞生和死亡时,将分别调用该对象所属类的构造函数和析构函数。
(2)与"小级别类型变量"的作用域及生存期类似,对象(即"大级别"的类类型的变量)也有各自的作用域及它们的生存期。
如全局性对象(程序中的globalG)将在执行main前被构造,各函数内的局部对象(auto属性),将在说明时被构造。块级别的局部对象
(auto属性者,程序中的autoB),在每次入块后都被重新构造(重新分配空间并初始化),出块时结束生命期(调用析构函数去析构它们)。
块级别的局部对象(static属性者,程序中的staticS),其作用域局部于块,但其生命期与全局性对象相同,只在第一次遇见时分配空间并初始化。