不要声明布尔值作为类成员变量 “血”的教训
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变量,记住别人那种痛苦的表情,警示自己不要犯这样的错误。哈哈。 |
相关文章推荐
- 如何将一个函数声明为两个类的友元或将该函数作为一个类的成员,另一个类的友元
- c/c++ 类中的成员变量声明时请优先考虑一下排列次序
- stl中string作为成员变量引起的core问题
- 初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的
- 条款22:将成员变量声明为private
- 条款22、将成员变量声明为private
- 将成员变量声明为private和用非成员、非友友提高封装性(Effective C++_22、23))
- C++ static、const和static const类型成员变量声明以及初始化
- 请不要将成员变量定义成public
- Java接口中的成员变量为什么必须声明为public static final?
- c++ 数组作为成员变量
- const限定符修饰的常量变量能否作为数组声明的维度、case行标或其他类似场景?
- 条款22:将成员变量声明为private
- Effective C++读书笔记---将成员变量声明为Private;宁以非成员、非友元函数替换成员函数
- [FxCop.设计规则]16. 不要在封闭类中声明虚成员
- Effective C++ -----条款22:将成员变量声明为private
- C++之将成员变量声明为private(22)---《Effective C++》
- C++的类的声明及成员变量和成员函数
- c++ 变量声明: 成员函数指针 成员变量指针
- 成员变量的声明位置引起编译错误