《Effective C++》笔记

本文是《Effective C++》的读书笔记,强调从C转向C++时应注意的编程习惯,如使用const和inline代替#define,采用< iostream>而非< stdio.h>,使用new和delete进行内存管理,以及在析构函数中正确处理指针。此外,还讨论了内存管理中的注意事项,如new和delete的一致性,以及如何避免内存泄漏。

从C转向C++

条款1:尽量用const和inline而不用#define

  • 少用define定义某个常量。在调试时编译器永远不会看到被define的那个数据,影响调试效率。应将“#define PI 3.14”改为“const double PI = 3.14”,性能相差无几,在类型安全上更可靠。但是注意,若要定义一个指针型常量,需要写两个const,比如const char * const authorName = “Scott Meyers”;
  • 少用define实现类似函数的功能。一是涉及到类型安全问题,编译器不会去检查“参数”的类型,二是可能出现函数重复运行的问题。例如max(++a,b),a的值增加了两次,而max(++a,b+10)则正常。

条款2:尽量用< iostream>代替< stdio.h>

  • 对cunt,cin的流操作相对于printf、scanf不用考虑变量类型、取地址等问题(scanf并不会检查参数是不是地址)。
  • 使用< iostream>而不是< iostream.h>。前者的命名空间是std,后者的则是全局,后者容易引起命名冲突。

条款3:尽量用new和delete而不用malloc和free

  • 后者不会激活类的构造函数和析构函数
  • 后者不会自动判断变量需要的内存空间,比如为字符串分配空间的时候
  • 千万不要把前者和后者混用

条款4:尽量使用C++风格的注释(//)

  • C风格的注释(/**/)不能嵌套(然后编译器不会报错,只会跳过一大段代码)
  • 在一些C语言预处理器中,宏定义后面的“//”注释可能成为宏的一部分

内存管理

条款5:对应的new和delete要采用相同的形式

  • 删除一个数组的时候要用delete [] stringPtr;否则结果不可预测。特别是使用typedef定义了数组型变量的时候要尤其注意。
  • 所以,对数组的需求最好减少到零,尽量采用std模板。

条款6:析构函数里对指针成员调用delete

  • 为了尽量避免内存溢出,每一个在构造函数里new的指针尽量都在析构函数里用delete处理
  • 构造函数里,要为每一个指针成员指向有效的内存,或者空指针(delete一个空指针也是安全的)
  • 一种避免必须删除指针成员的办法是使用智能指针auto_ptr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值