《More Effective C++》】的更多相关文章

<More Effective C#>这本书,大概是四年前看完的,但只整理了一部分读书笔记,后面有时间的话,会陆续补充的. More Effective C# :使用泛型 More Effective C# Item1 : 使用1.x框架API的泛型版本 More Effective C# Item2 : 恰到好处的定义约束 More Effective C# Item3 : 运行时检查泛型参数的类型并提供特定的算法 More Effective C# Item4 : 使用泛型强制编译期类型推…
百度云及其他网盘下载地址:点我 编辑推荐 <More Effective C++:35个改善编程与设计的有效方法(中文版)>:传世经典书丛 媒体推荐 <Effective c++>(Scott Meyers第一本书)的荣耀:“对于任何渴望在中阶或高阶层面精通c++的人,我慎重推荐<Effective c++>,” ——(The C/C++User's Journal) 作者简介 作者:(美国)梅耶(Scott Meyers) 译者:侯捷 Scott Meyers,世界顶…
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和references 1.1. 初始化 指针可以不初始化,引用必须初始化为. 引用没有null reference,指针可以设为NULL. //指针初始化为0,NULL,nullptr char *str = 0; int a = 1; //引用必须初始化,int &b;是错误的 int &b = a;…
More Effective C++ #@author: gr #@date: 2015-05-21 #@email: forgerui@gmail.com 五.对定制的"类型转换函数"保持警觉 5.1. C++中存在的转型 C++语言默认提供的隐式转型,包括将int转换为short,将double转换为char. 实现自己类型可能存在的转型:单自变量constructors和隐式类型转换操作符. 单自变量constructors: 指能够以单一自变量成功调用的constructors…
More Effective C++ #@author: gr #@date: 2015-05-24 #@email: forgerui@gmail.com 九.利用destructors避免泄漏资源 所谓RAII即"资源获取即是初始化的时候",所以就必须对资源进行释放.以一个对象存放资源,并依赖对象的析构函数释放资源. 把资源封装到对象体内,这样在发生异常时,对象析构时调用析构函数,释放资源,可以避免资源泄漏. 如果异常是在资源获取过程中抛出的,查看第十条:如果异常是在析构过程中发生…
这是篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是好书啊,对于学完C++ 基础知识的人,这是本高阶秘籍.值得注意的是 More Effective C++ 是以1997年的C++标准写的,那时候标准还不完善,20多年过去了,很多语言的漏洞和技术可能被新特性取代了,应该注意最终向新标准看齐. 笔记 条款1:仔细区别pointers 和 referen…
这事篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是好书啊,对于学完C++ 基础知识的人,这是本高阶秘籍. 笔记 条款 9 - 15 关注的主题是异常.关注1.异常可能引起的资源泄露(强烈推荐使用智能指针)2.异常是如何抛出的和3.异常的成本.目的是写出 exception-safe 的程序. 条款9: 利用 destructor避免资源泄露. 这个…
new operator申请内存,并调用构造函数: 而operator new只申请内存: new operator会调用operator new来申请内存:operator new可以重写或重载: placement new exception specifications void f1(); //该函数可能掷出任何类型的exception void f2() throw(int)://该函数只掷出型别为int的exception void f3() throw()://该函数不掷出任何ex…
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的.现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有一定的适用范围.如果可以返回一个匿名的临时对象,并且利用构造函数来得到结果对象,那么就有可能被优化到零开销.注意,有名字的对象意味着返回值优化不可用. 假设有如下的代码: node a(); node b(…
构造函数也可能发生内存泄露,考虑如下程序: class A { public: A(int *p) { if(p!=NULL) num=p; ); //do something } private: int *num; }; 假设在do something 处抛出异常了,那么即使有析构函数,也是不会执行的.在构造函数没有执行完全的对象是不会自动调用析构函数的,因为析构函数并不知道构造函数执行到哪了,会不会做的事多余了.而当异常没有被及时捕获的话,就会产生泄露了,且会抛异常到调用构造函数的地方.…