美文网首页
C++ 之 对象的构造顺序

C++ 之 对象的构造顺序

作者: 程序手艺人 | 来源:发表于2018-03-23 08:33 被阅读9次
    • C++中的类可以定义多个对象,那么对象构造的顺序是怎样的?

    对于局部对象

    • 当程序执行流到达对象的定义语句时进行构造

    对于堆对象

    • 当程序执行流到达new语句时创建对象
    • 使用new创建对象将自动触发构造函数的调用

    对于全局对象

    • 对象的构造顺序是不确定的
    • 不同的编译器使用不通的规则确定构造顺序

    头文件

    #ifndef _TEST_H_
    #define _TEST_H_
    #include<stdio.h>
    class Test
    {
    public:
        Test(const char *s)
        {
            printf("%s\n",s);
        }
    };
    #endif 
    

    t1.cpp

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

    t2.cpp

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

    t3.cpp

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

    main.cpp

    #include"test.h"
    Test t4("t4");
    int main()
    {
        Test t5("t5");
    }
    
    • 编译g++ t21-3.cpp t2.cpp t1.cpp t3.cpp -o test

    编译输出: t4 t2 t1 t3 t5

    小结

    • 局部对象的构造顺序依赖于程序的执行流
    • 局部对象的构造顺序依赖于程序的执行流
    • 全局对象的构造顺序是不确定的

    相关文章

      网友评论

          本文标题:C++ 之 对象的构造顺序

          本文链接:https://www.haomeiwen.com/subject/hertcftx.html