怎样阻止编译器因优化而缩短对象生命周期?

RLib 2012-08-05 08:42:05
1.

AutoLock(Object.GetSyncObject());


2.

AutoLock(Object.GetSyncObject()) locker;


第一种方案无法完成加锁动作
第二种方案可以完成加锁动作,但是不能排除编译器什么时候就把他优化了。


现在的要求是,阻止编译对其的优化,而保留全局和函数其他地方的优化。

How can I do it?
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

证明问题确实存在后再讨论解决方案。否则就是杞人忧天了。
你在挑战C++界赖以自豪的raii啊。


引用 5 楼 的回复:
引用 4 楼 的回复:

引用 3 楼 的回复:

引用 1 楼 的回复:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Rele……
[/Quote]

没办法,需要在不同编译器上编译。。。。
taodm 2012-08-05
  • 打赏
  • 举报
回复
证明问题确实存在后再讨论解决方案。否则就是杞人忧天了。
你在挑战C++界赖以自豪的raii啊。


[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

引用 3 楼 的回复:

引用 1 楼 的回复:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知


第一种的是临时对象,语句执行完就析构.

第二种....写错了吧.
如果是自动变量是不会有问题的.
编译器的……
[/Quote]
RLib 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

引用 1 楼 的回复:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知


第一种的是临时对象,语句执行完就析构.

第二种....写错了吧.
如果是自动变量是不会有问题的.
编译器的优化会保证合法的程序有相……
[/Quote]

因为对象后面不再引用,可能被干掉
iamnobody 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知
[/Quote]

第一种的是临时对象,语句执行完就析构.

第二种....写错了吧.
如果是自动变量是不会有问题的.
编译器的优化会保证合法的程序有相同的结果 .
RLib 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?
[/Quote]

第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知
xunxun 2012-08-05
  • 打赏
  • 举报
回复
加volatile限定

有的编译器也有相关的禁用代码段优化指导
taodm 2012-08-05
  • 打赏
  • 举报
回复
一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?

64,687

社区成员

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

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