发布时间:2012-12-24 11:01:47
为RAII等资源管理类提供一个直接获取其管理的“底层”资源的接口。class Res_Man{............private:res obj;}虽然大多时候直接操作的是Res_Man对象,但可能用户有时需要获取res对象进行复制等,所以可显示的提供一个get接口,或再封装后提供隐式转换接口。......【阅读全文】
发布时间:2012-12-24 10:36:14
Resource Acquisition Is Initialization (RAII).面对资源管理,上个条款中推荐使用。一定要注意此类的对象的copy行为,可以彻底拒绝(考构等声明为私有),更为常见的是使用引用计数(reference counting),来统计,计数清0时彻底释放资源(想一下协议栈IP包的复制管理)。再次推荐了shared_ptr。......【阅读全文】
发布时间:2012-12-24 10:07:57
手动new出来的对象极容易忘记使用delete释放,或者增量开发时在delete前加入了return或抛出异常,造成资源泄漏。因为一个类对象销毁时析构函数总是会调用到,所以强烈推荐使用对象来管理资源。Resource Acquisition Is Initialization (RAII) 资源获取最好就是在初始化时,也是形容此理念。最后推荐了TR1的shared_ptr和现有标准中的auto_ptr(已经被前者替代了)。......【阅读全文】
发布时间:2012-12-22 22:42:00
考构中注意所有数据成员的复制,有新的数据成员加入时,勿忘更新考构。考构与赋值运算符分开,前者用于创建对象,后者用于对象赋值。派生类的考构/赋值运算符中要调用基类的考构/赋值运算符。......【阅读全文】
发布时间:2012-12-22 21:36:53
重载的赋值运算符中必须要判断处理自赋值的情景,即自己赋值给自己。class Bitmap { ... };class Widget { ...private: Bitmap *pb; // ptr to a heap-allocated object};Widget&Widget::operator=(const ......【阅读全文】