![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
effective c++
文章平均质量分 72
weiyang1024
这个作者很懒,什么都没留下…
展开
-
条款01——条款03
1、extern int x; 如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字extern对该变量作外部变量声明,表示该变量是一个将在下面定义的全局变量。有了此声明,就可以从声明处起,合法地引用该全局变量,这种声明称为提前引用声明。 2、default 构造函数是一个可被调用而不带任何实参者。原创 2017-03-14 10:19:05 · 184 阅读 · 0 评论 -
条款04
1、C++规定,对象的成员变量(自定义类型)的初始化动作发生在进入构造函数本体之前,在构造函数内不是初始化,而是赋值操作。初始化的发生时间更早,发生于这些成员的default 构造函数被自动调用之时(比进入对象的构造函数的时间要更早)。 应该用成员初始化列表代替赋值操作,其效率较高。基于赋值的版本首先调用成员变量的default构造函数为其设初值,然后立刻再对它们赋予新值。而成员初始化列表原创 2017-03-14 12:29:50 · 251 阅读 · 0 评论 -
条款05
1、class Empty{ };当c++处理过空类之后,编译器会为它声明一个拷贝构造函数,一个赋值运算符和一个析构函数,还有default构造函数。所有这些函数都是public且inline的。 唯有当这些函数被需要时,它们才会被编译器创建出来:Empty e1; //default构造函数 //析构函数Empty e2(e原创 2017-03-14 15:08:13 · 231 阅读 · 0 评论 -
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
为了阻止class支持copy构造函数或copy assignment操作符,可以将它们声明为private,但是这个做法并不安全,因为member函数和friend函数还是可以调用你的private函数。除非你不去定义它们,那么如果不慎调用了任何一个,会获得一个连接错误。例:class A{public :private: A(const A&); A& oper原创 2017-03-14 15:37:16 · 255 阅读 · 0 评论 -
条款7
1、c++指出,当derivedclass对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未有定义——实际执行时通常发生的是对象derived成分没被销毁。这是形成资源泄露、在调试器上浪费许多时间的绝佳途径。消除这个问题的做法:给base class一个virtual析构函数。 2、如果class不含virtual函数,原创 2017-03-14 16:47:29 · 307 阅读 · 0 评论 -
条款8:不能让异常逃离析构函数,否则难以想象
1、c++并不禁止析构函数吐出异常,但它不鼓励你这样做。例:vector存的结构是class的话,当vector被销毁时,如果两个class在析构的时候抛出异常,程序若不是结束执行就是导致不明确行为。 2、如果析构函数必须执行一个动作,该动作可能会失败抛出异常,该怎么办? (1)如果抛出异常,通过调用abort直接结束程序; try { db.clo原创 2017-03-14 17:14:53 · 335 阅读 · 0 评论