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

昨天,写好了一个类提交到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变量,记住别人那种痛苦的表情,警示自己不要犯这样的错误。哈哈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值