社区
C++ 语言
帖子详情
全局对象构造的顺序
caddor2011
2014-05-28 10:01:04
全局对象构造的顺序
有2个全局对象, 全局对象a,使用全局对象b的时候,结果发现a先构造了,b的构造函数没有执行。
为了回避这个问题,于是我用new 一个a, a中再使用全局对象b.
问题虽然回避了, 依然不爽,到底如何解决这个问题呢。
vc有一些指令来强奸某个对象先构造, 我试了一下,似乎不行。
...全文
179
5
打赏
收藏
全局对象构造的顺序
全局对象构造的顺序 有2个全局对象, 全局对象a,使用全局对象b的时候,结果发现a先构造了,b的构造函数没有执行。 为了回避这个问题,于是我用new 一个a, a中再使用全局对象b. 问题虽然回避了, 依然不爽,到底如何解决这个问题呢。 vc有一些指令来强奸某个对象先构造, 我试了一下,似乎不行。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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等各种问题。
python-面向
对象
(二)
本课程主要讲解python中面向
对象
知识点,主要内容如下: 1. init方法使用 2.
全局
变量 3. 局部变量 4. str方法 5. del方法 6. 点和圆关系案例 7.烤地瓜案例
【C++基础入门】16.C++中
对象
的
构造
顺序
一、局部
对象
的
构造
顺序
对于局部
对象
当程序执行流到达
对象
的定义语句时进行
构造
二、堆
对象
的
构造
顺序
对于堆
对象
当程序执行流到达 new 语句时创建
对象
使用 new 创建
对象
将自动触发
构造
函数的调用 三、
全局
对象
的
构造
顺序
对于
全局
对象
对象
的
构造
顺序
是不确定的 不同的编译器使用不同的规则确定
构造
顺序
四、小结 局部
对象
的
构造
顺序
依赖于程序的执行流 堆
对象
的
构造
顺序
依赖于 new 的使用
顺序
全局
对象
的
构造
顺序
是不确定的 ...
【C++深度解析】14、
对象
的
构造
顺序
文章目录1
对象
构造
的
顺序
1.1 堆
对象
的
构造
顺序
1.2
全局
对象
的
构造
2 小结 1
对象
构造
的
顺序
局部
对象
:程序执行流到达
对象
的定义语句时进行
构造
堆
对象
:当程序的执行流到达 new 语句时创建
对象
全局
对象
:
构造
顺序
是不确定的 1.1 堆
对象
的
构造
顺序
当程序执行流到达new语句时创建
对象
使用 new 创建
对象
将自动触发
构造
函数的调用 // 14-1.cpp #include<...
C++
全局
对象
,静态局部
对象
,自动局部
对象
构造
析构
顺序
全局
对象
构造
在main函数执行之前,局部静态
对象
构造
在执行函数体之前;局部静态
对象
析构早于
全局
对象
,都在main函数之后。 #include<stdio.h> class A { int a; public: A(int i) {a = i; printf("A() %d\n", a);} ~A() {printf("~A() %d\n", a);} }; void Get() { printf("Get() enter\n"); static
C++ 编程规范-静态
对象
与
全局
对象
的
构造
顺序
类和
对象
静态
对象
与
全局
对象
的
构造
顺序
类中的静态
对象
类中的静态成员
对象
,即使没有被使用,也会被
构造
和析构。比如B类中的m_sa(类类型的静态成员变量),也会被分配内存。 如果m_sa不是类类型,而是简单类型,比如double, int,那么源码中如果没有用到这个静态成员变量,编译器可能不会分配内存。 函数中的静态
对象
:如果该函数没被调用,那么这个静态
对象
不会被
构造
和析构。 class A { public: A(); ~A(); }; class B{ public: inline s
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章