摘要: 请牢记:如果在new表达式中使用[],必须在相应的delete表达式中也使用[]。 new[] 对应 delete[]如歌在new表达式中不适用[],一定不要在相应的delete表达式中使用[]。 new 对应 delete当使用new时(即通过new动态生成一个对象),有两件事发生:第一,内存被分配出来(通过名为operator new 的函数);第二,针对此内存会有一个(或更多)构造函数被调用。当使用delete时,也有两件事发生:针对此内存会有一个(或更多)析构函数被调用,然后内存才被释放(通过名为operator delete 的函数)。delete的最大问题在于:即将被删除的内存之内 阅读全文
posted @ 2013-12-13 01:49 陌上归人 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 请牢记:1、APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。2、对原始资源的访问可能经由显式转换或隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。前面条款13的例子中使用了智能指针如auto_ptr或tr1::shared_ptr保存createInvestment的调用结果:std::tr1::shared_ptr pInv(createInvestment()); 假如某个API希望以某个函数处理Investment对象,返回投资天数,如下:int dayHeld(const Investment* pi); //返回投. 阅读全文
posted @ 2013-12-13 01:17 陌上归人 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 请牢记:1、复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。2、普遍常见的RAII class copying行为是:抑制copying、施行引用计数法。不过其他行为也可能被实现。auto_ptr和tr1::shared_ptr的观念表现在heap_based资源上。然而并非所有资源都是heap_based,对于非heap_based资源而言,需要建立自己的资源管理类。假设我们使用C API函数出来类型为Mutex的互斥器对象(mutex objects),共有lock和unlock两个函数。void lock(Mutex* pm) 阅读全文
posted @ 2013-12-13 00:41 陌上归人 阅读(329) 评论(0) 推荐(0) 编辑