C++ 全局构造函数调用的顺序

C++的全局类和静态类的构造函数是在main函数之前调用的。但是,不同的类的构造函数以什么顺序调用呢?


对于g++编译器来说,这个顺序是由链接时,文件顺序决定的。


我们用一个例子来说明这一点。

我们有3个文件:t1.h, t1.cpp和tt1.cpp,内容分别是

t.h

#ifndef T_H
#define T_H
#include <stdio.h>
class A {
public:
   A();
};

class B {
public:
   B(){ a_ = NULL; }
   void setA(A* a) { a_ = a; }
   A * a() { return a_; }

   static B _b;
private:
   A *a_;
};

extern A *g_a;
#endif

tt.cpp
#include "t.h"

B B::_b;

A *g_a = NULL;

A::A()
{
	B::_b.setA(this);
	g_a = this;
}
t.cpp

#include "t.h"

A a;

int main()
{
	printf("a=%p, b.a=%p, g_a=%p\n", &a, B::_b.a(), g_a);
}

t.h定义了类A和B,其中,在A的构造中,A将自己的指针付给B::_b.a_和g_a。

那么ÿ

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值