C++ 之 对象的构造顺序

  • 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

小结

  • 局部对象的构造顺序依赖于程序的执行流
  • 局部对象的构造顺序依赖于程序的执行流
  • 全局对象的构造顺序是不确定的
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0. 问题:C++中的类可以定义多个对象,那么对象构造的顺序是怎样的? 1. 局部对象的构造顺序 对于局部对象,当...
    编程半岛阅读 252评论 0 0
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,435评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,228评论 0 4
  • 宋先生过年不休,所以今年过年不能回老家了。 趁着年前还有一天空闲,赶紧回家给老杨送年货。 大白驰骋在宽敞的山海路上...
    盖子团长阅读 415评论 3 2
  • 锦瑟流年(目录)——————————皇上甩手走后,果真一连几天没有踏进过碧云宫。却听说夜夜宿在瑞雪宫。瑞雪宫便是新...
    玉楼人醉阅读 868评论 0 3

友情链接更多精彩内容