重读Effective C++的几点收获

1:
常量可以放在头文件里,包括常量字符串,但是定义常量字符串应当这样定义
const char* const pStr = "str";
const char Str[] = "str";

 

2:

如果内存不足,new会跑出一个bad_alloc的异常,如果设置了内存不足的处理函数,那么,该函数要么

abort退出,要么找到可用的内存!不然会陷入死循环!

但当调用operator new来分配一个airplane对象时,得到的内存可能要比存储这个指针(或一对指针)所

需要的要多。之所以会产生这种看起来很奇怪的行为,在于operator new和operator delete之间需要互

相传递信息。
所以,其实不比太过于在意new的失败的问题, 要么自己捕捉bad_alloc异常让程序


3
为需要动态内存配的类,重写copy构造和赋值构造函数

不要反回类内部数据的句柄,如果不得已返回,就返回const 句柄。
eg string:: const char* operate ();
或 string:: const char* c_str();

////////////////////////////////
2009.9.9
1: 决不要重新定义继承而来的非虚函数
2: 避免向下转换,可以尝试用虚函数实现(向下转换一般是为了使用派生类的某个功能,如果使用了虚函数,则自动使用了派生类的功能,可以避免向下转换),实在不行,使用dynamic_cast<>安全点
3: 无需强制转换 malloc() 的返回值, 使用sizeof(*p) 或使用sizeof(变量)的形式比较好
4: 阻止构造函数里泄露资源的方法:try 捕捉new等的任何的异常,一旦有异常,delete掉所有的指针。
   终极方法是 使用auto_prt<>存放指针。这仰仗于C++保证,一般一个类被构造起来,那么其析构函数保证被调用
5: 通过引用接受异常对象
   指针面临着删除指针的问题。
   传值面临着切割的问题。

你可能感兴趣的:(重读Effective C++的几点收获)