一道程序代码难题求大佬解答 5
#include<iostream>
using namespace std;
class Test
{private:
int id;
public:
Test(int i=0):id(i)
{cout<<id<<" cons called"<<endl;}
~Test()
{cout<<id<<" des called"<<endl;}
}t0;
void create()
{
Test t3(3);
static Test t4(4);
}
int main()
{
Test t1(1);
static Test t2(2);
Test *pt=new Test(5);
create();
delete pt;
Test t6(6);
return 0;
} 展开
1、全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。
2、局部对象,当对象生成时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。
3 、静态(static)对象,当对象生成时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。
4、以new方式产生出来的局部对象,当对象生成时其构造函数被执行,析构函数则在对象被delete时执行时执行
t0是全局对象,先调用构造函数,因为没设定参数,默认为0,调用构造函数,输出0 cons called
接着到main函数里,定义t1(1),调用构造函数,输出1 cons called
接着定义t2(2)输出2 cons called,*pt(5)输出5 cons called
进入creat函数,分别输出3 cons called,4 cons called。
结束creat函数,调用t3的析构函数,输出3 des called。t4是静态对象,结束时调用析构
删掉Pt,调用其析构,输出5 des called
输出6 cons called
结束main函数,分别调用内部局部对象的析构6 des called,1 des called。(从下到上)
然后调用静态对象的析构函数,(也是从下到上),输出4 des called,2 des called
最后调用全局变量的析构函数输出 0 des called
结束程序
顺便说一句,百度的知道的这个回答框的编辑功能太差了。我看百度也没咋维护这个产品。