![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《Effective C++》读书笔记
文章平均质量分 56
xiedejun1984
Graduate from 哈尔滨工业大学,
Major in 计算机,
硕士,
C++,
Cloud Computing,
Life@北京,
Work@阿里巴巴
展开
-
条款02:尽量以const, enum, inline替换#define(Prefer consts,enums, and inlines to #defines)
1)对于单纯常量,最好以const对象或mums替换#defineso2)对于形似函数的宏(macros ),最好改用inline函数替换#define原创 2010-07-13 00:15:00 · 518 阅读 · 0 评论 -
条款14:在资源管理类中小心coping行为(Think carefully about copying behavior in resource-managing classes.)
1)复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。2)普遍而常见的RAII class copying行为是:抑制copying、施行引用计数法(reference counting )。不过其他行为也都可能被实现。原创 2010-08-23 14:22:00 · 628 阅读 · 0 评论 -
条款13:以对象管理资源(Use objects to manage resources.)
1)为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。2)两个常被使用的RAII classes分别是trl::shared}tr和auto- ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto- ptr,复制动作会使它(被复制物)指向null。原创 2010-08-23 12:00:00 · 579 阅读 · 0 评论 -
条款11:在operator=中处理“自我赋值”(Handle assignment to self in operator=.)
1)确保当对象自我赋值时operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap。2)确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。原创 2010-08-20 11:56:00 · 1376 阅读 · 0 评论 -
条款10:令operator=返回一个reference to *this(Have assignment operators return a reference to *this.)
1)令赋值(assignment)操作符返回一个reference to*this。原创 2010-08-20 10:53:00 · 554 阅读 · 0 评论 -
条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction.)
1)在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)。原创 2010-08-19 19:16:00 · 324 阅读 · 0 评论 -
条款07:为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes.)
1)polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。2)Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不该声明virtual析构函数。原创 2010-08-19 17:32:00 · 464 阅读 · 0 评论 -
条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated you do not want.)
1)为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。原创 2010-08-19 16:11:00 · 467 阅读 · 0 评论 -
条款08:别让异常逃离析构函数(Prevent exceptions from leaving destructors.)
1)析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。2)如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。原创 2010-08-19 18:11:00 · 353 阅读 · 0 评论 -
条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls.)
1)编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。原创 2010-08-19 15:44:00 · 411 阅读 · 0 评论 -
条款03:尽可能使用const(Use const whenever possible.)
1)将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。2)编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性” (conceptualconstness)。3)当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。原创 2010-08-18 16:54:00 · 568 阅读 · 0 评论 -
条款04:确定对象被使用前已先被初始化(Make sure that objects are initialized before they're used.)
1)为内置型对象进行手工初始化,因为c什不保证初始化它们。2)构造函数最好使用成员初值列(member initialization list ),而不要在构造函数本体内使用赋值操作(assignment )。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。3)为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。原创 2010-08-19 14:43:00 · 685 阅读 · 0 评论 -
条款01:视C++为一个语言联邦(View C++ as a federation of languages)
1)C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。原创 2010-07-13 00:14:00 · 900 阅读 · 0 评论 -
条款12:复制对象时勿忘其每一个成分(Copy all parts of an object.)
1)Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。2)不要尝试以某个‘opying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用。原创 2010-08-20 12:23:00 · 614 阅读 · 0 评论