![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective C++
zpznba
日日行,不怕千万里。常常做,不怕千万事。
展开
-
Effective_C++_条款九:绝不在构造和析构函数中调用virtual函数
避免在构造和析构函数中调用virtual函数 切记:在基类构造期间,virtual函数会被当作普通函数调用 class Base { public: Base() { VirtualFunction(); } virtual void VirtualFunction() ...原创 2019-03-23 22:20:43 · 85 阅读 · 0 评论 -
Effective_C++_条款十:令operator=返回对象的引用
为什么返回引用 为了支持连锁赋值 返回引用可以节省资源,不必要为返回值调用构造函数了 什么是连锁赋值 int x,y,z; x = y = z = 5; 这种赋值方式称为连锁赋值,它满足右结合律 x = ( y = ( z = 5 )); 赋值表达式z = 5执行后,将更新后的z值赋值给y,以此类推。 自定义类型的连锁赋值 Widget m; ... Widget x, y,...原创 2019-03-23 22:33:39 · 223 阅读 · 0 评论 -
《Effective C++》条款七:为多态基类声明virtual析构函数
多态基类:顾名思义,是为了实现多态的基类。也就是说当一个类准备作为基类使用,且这个类中有虚函数的话,那么就应该给这个类加上虚析构函数。而非基类或者不用于多态的基类,就不要加。下面来具体分析一下: 严格来说,多态分为编译时多态和运行时多态,编译时多态是函数的重载,而运行时多态则是迟绑定技术,即根据基类指针或引用的实际指向来决定采取何种行动,一般来说,多态特指运行时多态。下面我们来举有关C++多态的...原创 2019-03-15 14:44:03 · 208 阅读 · 0 评论 -
《Effective C++》条款六 拒绝编译器自动生成的函数
如果类的每个对象都是独一无二的(《Effective C++》中所举的例子是地产中介商卖的房子),我们当然不希望类的对象之间存在拷贝构造和拷贝赋值操作: class HomeForSale {…} 每个房子都是不一样的,所以希望这样: 1 HomeForSale house1; 2 HomeForSale house2; 3 HomeForSale house3(house1); // ...原创 2019-03-14 09:24:08 · 129 阅读 · 0 评论 -
Effective C++条款五:C++默认编写了哪些函数
几乎每一个类都会用到构造、析构和赋值方法。 C++默认编写了哪些函数 拷贝构造函数 赋值操作符 析构函数 默认构造函数(如果你没有声明任何构造函数) 编译器默默添加的这些函数都是public inline的。 默认构造函数,有两个职责 调用基类的构造函数 调用non-static成员变量的构造函数 析构函数,也有两个职责 调用基类的析构函数 调用non-static成员变量的析...原创 2019-03-14 08:37:21 · 116 阅读 · 0 评论 -
Effective_C++_条款二:尽量以const, enum, inline替换#define
其实这个条款分成两部分介绍会比较好,第一部分是用const和enum替换不带参的宏,第二部分是用inline替换带参的宏。 第一部分:用const和enum替换不带参宏 宏定义#define发生在预编译期,而const,enum定义的常量发生在编译期,两者的重要差别在于编译期里的变量是进符号表的,而预编译期的宏是简单的替换,不进符号表。因此,const, enum定义的常量具有以下优势: (...转载 2019-07-02 22:12:48 · 104 阅读 · 0 评论