构造函数顺序为: 注:static对象的构造函数永远只调用一次。 析构函数顺序为: 注:复合中的构造、析构顺序 构造:按声明对象的顺序来构造成员对象,而不是按照构造函数成员初始值列表中列出的顺序;而且在包含它们的类对象(宿主对象)被构造之前构造。即:由内向外构造。 析构:按对象构造的逆序析构。对于复合对象,先析构主对象,再析构其包含的对象。 id=4,Con main id=2,Con id=3,Con fun id=3,Des id=4,Des endmain id=3,Con fun id=3,Des id=4,Des id=8,Con
#i nclude <iostream>
using namespace std;
class Demo {
int id;
public:
Demo(int i)
{ id = i;
cout << "id=" << id << ",Con" << endl; }
~Demo()
{ cout << "id=" << id << ",Des" <<endl; }
};
static Demo d2(2);
Demo d3(3);
cout << "fun" << endl;
}
void main () {
cout <<"main"<< endl;
fun(d1);
cout << "endmain" << endl;
fun(d1);
Demo * p = new Demo(8);
}
C++构造函数与析构函数执行顺序 ?
最新推荐文章于 2025-02-28 07:00:00 发布
本文探讨了VC6.0编译器在处理C++构造函数与析构函数时出现的问题,特别是在涉及静态对象和全局对象时的表现。通过一个具体的测试案例展示了不同头文件对程序行为的影响。
今天在测试一个构造函数和析构函数的用例的时候,发现我们所钟爱的VC6.0实在是Bug问题越来越多,对于学习C++的新手来讲,有必要在这里给大家说明一下。
比如有以下的测试用例:
//#i nclude <iostream.h>
Demo d1(4);
void fun(Demo d) {
程序执行的时候,在VC6 withSp6下运行的结果
id=2,Des
//id=4,Des //在用<iostream.h>的时候才有此句输出
其中包含有注释的部分,为调整包含的头文件为<iostream.h>的情况下才有的输出。如果使用 命名空间的std的话,没有最后的一句输出。
从百度上找了半天,才发现不是没有调用全局变量的析构函数,而是因为我们所用的编译器有问题,这是MS的产品对于C++的支持做的不是尽善尽美,有网友说在Vc7.0中好想消除了这个Bug。
460

被折叠的 条评论
为什么被折叠?



