Effective C++读后感第二章
c++是一门面向对象的语言,这就意味着我们必须亲手构造一些类,而每一个类都会有构造函数、析构函数、赋值函数等。
条款5:了解c++默默编写并调用了那些函数。
什么时候空类不再是空类呢,当编译器开始处理的时候,编译器会为空类创建一些默认构造函数以及拷贝构造函数还有赋值操作以及析构函数。
注意: 编译器产生的析构函数不是一个虚函数。
条款6:若不想使用编译器自动生成的函数,就该明确拒绝。
方法是可将相应的成员函数声明为private,并且不予以实现。
条款7;为多态基类声明vitual析构函数
欲实现虚函数,对象必须携带某些信息,主要用来在运行期决定哪一个虚函数盖被调用。很多人的心得是:不要无端将类的所有析构函数声明为虚函数,只有类中含有一个虚函数时,才将析构函数声明为虚函数。但还是会出错,当两个类是否含有虚函数时,被继承下去的子类,当两种基类指针指向同一个·子类时,删除不带虚函数的基类指针,就存在内存泄漏、。
必须为纯虚函数提供定义。
如果是为实现多态的基类,就必须声明虚析构函数,如果不是作为基类使用,就不要声明虚析构函数。
条款8:别让异常逃离析构函数。假如析构函数必须执行一个动作,而该动作在失败时抛出异常该怎办。一个解决办法是创建一个资源管理的类,在析构函数中调用close。
析构函数绝对不要吐出异常
如果客户需要在运行期间抛出的异常做出反应,那么class应该提供一个普通函数执行该操作。
条款9:绝不在构造和析构过程中调用虚函数。
在基类构造期间,虚函数不是虚函数。
条款10:令operator=返回一个对对象的引用
主要是为了实现连锁赋值
条款11:在operator=中处理“自我赋值”。
可以利用copy及swap技术,先生成一个副本,再交换,返回对象引用。
条款12:复制对象时勿忘其每一个部分。
Copying 函数应该确保复制对象内的所有成员变量及所有基类成分。
不要尝试以某个Copying函数实现另一个Copying函数,应该将共同机能放在第三个函数中,并由两个Copying函数共同调用。
#实习#