C++学习过程中踩的地雷

菜鸟最近浅尝win32,觉得还是找个地方记录下遇到的问题,养成一个良好习惯。
话说要弄一个用gdi+的小玩意儿,于是在头文件中定义了这么一个变量,用来存储显示器每毫米的像素数。

const unsigned nPixelPerMillimeter = GetDeviceCaps(GetDC(NULL), HORZRES) / GetDeviceCaps(GetDC(NULL), HORZSIZE);
接下来定义了一个自定义类的全局对象a,构造中使用了这个nPixelPerMillimeter,然后就悲剧了。vs不报错,然后编译运行的时候程序窗口出不来,而内存占用一直在攀升,并且这个问题不是必然发生,有一定机率看脸能运行。找到罪魁祸首之后思虑一番,应该是运行期a和nPixelPerMillimeter的初始化先后顺序无法保证,至于为何出现内存泄漏就不得而知;
最后解决办法是将全局对象改为指针,并在窗口的WM_CREATE消息处理函数中用new来构造。
补充:正好看到effective c++中第四条,“C++对定义于不同编译单元内的non-local-static对象的初始化顺序并无明确定义”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值