重读Effective C++的几点收获

本文探讨了C++中关于内存管理的关键实践,包括如何正确使用new与delete操作符,处理内存分配失败的情况,以及如何通过重写构造函数来避免资源泄露。此外,还讨论了异常处理的最佳实践,如通过引用传递异常对象,并提出了一些防止内存泄漏的建议。
 

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: 通过引用接受异常对象
   指针面临着删除指针的问题。
   传值面临着切割的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值