全局对象构造的顺序

caddor2011 2014-05-28 10:01:04

全局对象构造的顺序

有2个全局对象, 全局对象a,使用全局对象b的时候,结果发现a先构造了,b的构造函数没有执行。

为了回避这个问题,于是我用new 一个a, a中再使用全局对象b.

问题虽然回避了, 依然不爽,到底如何解决这个问题呢。

vc有一些指令来强奸某个对象先构造, 我试了一下,似乎不行。



...全文
179 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2014-05-28
  • 打赏
  • 举报
回复
C++规定,在同一个编译单元(同一个.cpp程序)中,先定义的对象先创建,后定义的对象后创建;而销毁时则相反,后定义的对象先销毁,先定义的对象后销毁。 但在不同的.cpp程序中,C++对此则没有定义,不同的编译器和链接器可能会有不同的处理。通常的情况与链接的顺序有关。 lz你可以不要依赖构造函数,你可以自己写Init函数,然后按照你自己的顺序需要去调用全局对象的Init
ri_aje 2014-05-28
  • 打赏
  • 举报
回复
同一个编译单元,先定义的对象先构造。 不同的编译单元,顺序没有要求,不要依赖这种“顺序”。 非得要求顺序的话,使用函数局部静态对象。
caddor2011 2014-05-28
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
非要用的话,使用使用函数内的static 对象。
这些话,我搜索岛很多类似帖子, 我想知道一些具体的实现方案,举例子吧 全局对象a, b a要引用b, b是一个全局的,很多对方都用到它, 非要用的话,使用使用函数内的static 对象。 你的意思是这样用: A& GetA() { static A a; return a; } B& GetB() { static B b; return b; } 这2个函数可以作为全局函数。 A的构造函数里要引用b A::A() { int a = GetB().成员1; int b = GetB().成员2; } 这样对吗?
mujiok2003 2014-05-28
  • 打赏
  • 举报
回复
非要用的话,使用使用函数内的static 对象。
mujiok2003 2014-05-28
  • 打赏
  • 举报
回复
慎用全局对象,避免构造依赖, 异常, 线程安全,false sharing等各种问题。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧