您的位置:首页 > 其它

不要声明布尔值作为类成员变量 “血”的教训

2012-03-07 23:05 253 查看

[align=center][/align]



昨天,写好了一个类提交到VSS,代码评审未通过,原因是我声明了一个bool做为类的成员变量,一前辈大吃一惊,跑到我面前说,兴奋又痛苦的说,赶快把bool改成BOOL,这是我血的教训,我以前调了一天就是因为这个错误。“不能把bool声明为类的成员变量”。

    为什么?

    原因是字节对齐的问题,bool是占1个字节,BOOL是占4个字节,(typedef int BOOL). 在一般的情况是没有问题的。实际上VC中引入BOOL,是为了和C的兼容性,因为C语言里面是没有bool这个概念的,他只是用0,1int来代替bool的。

   问题出现在堆分配的时候,比如我们要new一个对象,C++中为了字节对齐,bool是占用4个字节的。没有问题new是没有问题的,但是当我们delete的时候,c++编译器默认的是按照他的数据类型来删除内存的,它只删除bool那1个字节内容,而实际上bool占用了4字节,有3个字节删除不掉,那么问题就出现了。

    老一辈的程序员门启示我们,不要在类里面声明bool变量,记住别人那种痛苦的表情,警示自己不要犯这样的错误。哈哈。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vss 编译器 delete 语言 c