对象的构造顺序

对象的构造往往和构造函数会牵扯在一起,构造函数的函数可能会由非常复杂的逻辑所组成,不同类的构造函数的程序逻辑很可能是相互依赖的,当这种相互依赖一旦成立,那么对象的构造顺序很可能导致难以调试的Bug出现
对象的构造顺序
对于局部对象
当程序执行流到达对象的定义语句时进行构造
对于堆对象
当程序执行到达new语句时创建对象
使用new创建对象将自动触发构造函数的调用
对于全局对象
对象的构造顺序是不确定的
不同编译器使用不同的规则确定构造顺序
例子:

#include "test.h"

Test t4("t4");

int main()
{
    Test t5("t5");
}
#include "test.h"

Test t1("t1");
#include "test.h"

Test t2("t2");

#include "test.h"

Test t3("t3");
#ifndef _TEST_H_
#define _TEST_H_

#include <stdio.h>

class Test
{
public:
    Test(const char* s)
    {
        printf("%s\n", s);
    }
};

结果:

sice@sice:~$ g++ 21-3.cpp t2.cpp t1.cpp t3.cpp test.h
sice@sice:~$ ./a.out 
t3
t1
t2
t4
t5

验证了 对于全局对象对象的构造顺序是不确定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值