游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3533|回复: 5

请教:vc2008下能否强制构造未引用全局对象?

[复制链接]

20

主题

222

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2010-1-18 03:58:00 | 显示全部楼层 |阅读模式
为了在程序启动时自动执行一些分散的初始化操作,我把这些初始化操作放进一个个小类的构造函数里,然后为各类定义一个全局实例。由于只需执行其构造函数,程序执行代码里没有引用这些对象。结果它们大部分被编译器忽略掉了,根本没执行构造。优化已关,[em7]
感觉vs智能过头了,不知有无办法让它老实点?请高手赐教,先谢了。   [em10]

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2010-1-19 11:27:00 | 显示全部楼层

Re:请教:vc2008下能否强制构造未引用全局对象?

全局静态变量基本上你无法控制其生命期
建议使用new来手动控制其生命周期

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-1-19 16:22:00 | 显示全部楼层

Re:请教:vc2008下能否强制构造未引用全局对象?

单件模式

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2010-5-2 14:39:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

3

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-5-22 15:07:00 | 显示全部楼层

Re:请教:vc2008下能否强制构造未引用全局对象?

静态 数据成员Static

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-6-21 23:17:00 | 显示全部楼层

Re:请教:vc2008下能否强制构造未引用全局对象?

呵呵,这个问题我也遇到过,据说是MS Compiler的bug.
在DLL中没有这个问题,所有的静态对象都能初始化,不管有没有被引用.
在其他地方的话,比如exe中另外的一个源文件
或者另一个lib中的对象,如果没有引用的话,编译器把它干掉..汗..

我的解决方法比较麻烦,
在你分散的文件中声明一个变量,然后在主流程中引用一下就好了.

//init.cpp
static init_class init;//这是你的初始化对象和初始化类(init_class)
int forece_ref; // or const char* forect_ref;

//主流程:
int main()
{
  init();
...
}

void init()
{
extern int force_ref; // or extern const char* force_ref;
force_ref = 0; //应用init.cpp中的数据,这个时候编译器就不会乱来了,会老老实实的初始化你的init.cpp中的对象
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 16:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表