分享

Effective C++ 摘要(条款1 -to-条款10

 My Room 2012 2012-03-17
条款1:尽量以const 和 inline 取代 #define
#define ASPECT_RATIO 1.653 -> const double ASPECT_RATIO = 1.653;
原因是编译器会看不到ASPECT_RATIO这个符号名,它会先被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是1.653,而不是ASPECT_RATIO。
#define max(a,b) ((a) > (b) ? (a) : (b)) -> inline int max(int a, int b) { return a > b ? a : b; }或者全量版本的template
template<class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }
原因#define定义的宏行为不可预期,没有没有引数型别检查,而inline可以解决这两个问题,而且不会降低效率。
条款2:尽量用<iostream>而不用<stdio.h>
原因是iostream 有型别安全性,并且可扩充,易用,不用记那么多格式。
条款3:尽量用new和delete而不用malloc和free
原因是malloc和free对于构造函数和析构函数一无所知。而new和delete能够和构造函数和析构函数有很好的互动。
条款4:尽量使用c++风格的注释
 原因是c风格的注释会存在嵌套问题,使注释过早结束。
条款5:对应的new和delete要采用相同的形式(显然)。

条款6:记得在析构函数里对指针成员调用delete(显然)。

条款7:预先准备好内存不够的情况
最简单的方法是使用set_new_handler和重载operator new,具体参见原著。
条款8: 写operator new和operator delete时要遵循常规
自己重写operator new时,很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来也就是:要有正确的返回值;要有内存不够时要调用出错处理函数(见条款7);处理好0字节内存请求的情况。此外,还要避免不小心隐藏了标准形式的new(条款9)
operator new实际上会不只一次地尝试着去分配内存,它要在每次失败后调用出错处理函数,还期望出错处理函数能想办法释放别处的内存。只有在指向出错处理函数的指针为空的情况下,operator new才抛出异常。
条款9: 避免隐藏标准形式的new
在类里面重写的operator new必须支持标准new调用方式。
条款10: 如果写了operator new就要同时写operator delete
基类如果遗漏了虚拟构函数,operator delete就有可能工作不正确

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多