1.有时候,我们替换掉编译器提供的new或者delete.首先思考,为什么想要替换?下面是三个常见理由: a.用来检测运用上的错误,超额分配一些内存,再额外的空间放置一些内存: b.为了强化效能,编译器提供的new/delete是通用的,通用就意味着冗余和效率低下,为什么?这个很好理解,因为他要支持很多情况下,也必须考虑很多情况.我们重写new/delete,也就是说,对于特定情况,给出特定的实现. c.为了收集使用上的统计数据.…
(一) 为什么有人想要替换operator new 和 operator delete呢?三个常见的理由: (1)用来检測运用上的错误. (2)为了强化效果. (3)为了收集使用上的统计数据. (二) 以下是个高速发展得出的初阶段global operator new.促进并协助检測"overruns"或"underruns". static const int signature = 0xDEADBEEF; typedef unsigned char Byte;…
有许多理由需要写个自定的new 和delete ,包括改善效能.对heap 运用错误进行调试.收集heap 使用信息.…
条款49 了解new-handler的行为 记住: ★set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用 ★Nothrow new是一个颇为局限的工具,∵其只适用于内存分配:后继的构造函数调用还是可能抛出异常 ----------------------------------------------------------------------------------- new操作符私底下通过调用operator new来实现内存分配.当operator ne…
看完Effective C++才觉得平时程序设计时需要注意的一些问题,有一定的收获,不过因为没什么项目实践, 并未很深入了解具体情况如何,还需后继实践~ 列举一下55个条款: 1. 视C++为一个语言联邦. 2. 尽量以const, enum ,inline 替换#define a)  对于单纯常量,最好以const 对象或 enum 替换 #define b)  对于形似函数的宏,最好改用inline 函数替换 #define 3. 尽可能使用const a)  将某些东西声明为const可帮…
1.  视C++为一个语言联邦 C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2.  尽量以const,enum.inline替代#define 1) 对于单纯常量,最好以const对象或enum替换#define 2) 对于形似函数的宏.最好改用inline函数替换#define 3)宁能够编译器替换预处理器 4)用define定义的名称并没有进入符号表.无法对其进行跟踪 3.  尽可能使用const 1)假设keywordconst出如今星号左边.表示被指物是常量:右边,指…
Charpter 1. 让自己习惯C++   条款01: 视C++为一个语言联邦 条款02: 尽量以const,enum,inline替换#define 条款03: 尽可能使用const 条款04: 确定对象被使用前已先被初始化 Charpter 2. 构造/析构/赋值运算                           条款05: 了解C++默默编写并调用哪些函数 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝 条款07: 为多态基类声明virtual析构函数 条款08: 别让异…
//---------------------------15/04/27---------------------------- //#49   了解new-handler的行为 { /* 1:在operator new操作失败时,它首先会调用new_handler函数来处理,客户可以通过set_new_handler 的函数来设置new_handler函数. 2:一个设计良好的new_handler必须做以下事情: 1>让更多内存可被用: 程序一开始执行就分配一大块内存,而后当new_han…
1. 让自己习惯C++ 条款01: 视C++为一个语言联邦 1.1 C++ 是一个多重泛型编程语言(multiparadigm programming),支持:过程形式(procedural),面向对象形式(object-oriented),函数形式(functional),泛型式(generic),元编程(metaprogramming). 1.2 将C++看做主语言,那么他就四种次语言组成:C,object-oriented C++,Template C++, STL. 请记住: C++ 高…
条款49:了解new-handler的行为 当operator new无法分配出内存会抛出异常std::bad_alloc 抛出异常前会反复调用用户自定义的new-handler函数直至成功分配内存 // 自定义new_handler函数 void outOfMem() { cerr << "Unable to satisfy request for memory" << endl; abort(); } //测试 int main() { set_new_ha…