您的位置:首页 > 编程语言 > C语言/C++

Effective C++读书笔记

2017-02-10 17:20 106 查看
         前些天看了《Effective C++》这本书,感受颇深,现将读书过程中记录的相关笔记总结如下,希望会对大家有所帮助。

1、千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用。
    原因:返回一个局部对象的引用他的问题在于,局部对象仅仅是局部的,也就是说局部对象是在定义时被创建,在离开生命空间时被销毁的。所谓生命空间就是他们所在的函数体,当函数返回时,程序的控制离开了这个空间,所以函数内部的所有局部对象都会被自动销毁。
2、写一个返回废弃指针的函数无异于坐等内存泄露的到来。
3、inline指令就像register,他只是对编译器的一种提示,而不是命令。一个给定的内联函数是否真的被内联取决于所用的编译器的具体实现。如果函数中包含静态对象,通常要避免将它声明为内联函数。
4、纯虚函数最显著的特征是:他们必须在他的派生类中重新声明,而且他们在抽象类中往往没有定义。所以定义纯虚函数的目的在于使派生类仅仅只是继承函数的接口。而声明简单虚函数的目的在于,使派生类不仅继承函数的接口,还继承了函数的缺省实现,派生类可以选或者不改写他们。
5、协议类:声明一个除纯虚函数外,什么也不包含的类,这样的类叫做协议类。他为派生类仅提供函数接口,完全没有实现。
6、虚函数是动态绑定的,而缺省参数的值是静态绑定的。虚函数是动态绑定的意思是:虚函数通过那个对象被调用,具体被调用的函数就由哪个对象的动态类型决定。
7、任何情况下都要禁止重新定义继承而来的非虚函数。
8、为了保证常量最多只有一份拷贝,就需要把它定义为静态成员。
9、operator new在无法完成内存分配请求时会抛出bad_alloc异常。而且他会在抛出异常之前调用客户指定的一个出错函数------一般称为new-handler函数,指定出错处理函数时要用到set_new_handler函数。在operator new不能满足内存分配请求时,new-handler函数不只调用一次,而是不断重复,直到找到足够的内存。只有在指向出错处理函数的指针为空的情况下,operator
new才会抛出异常。
10、内存泄漏会无限的增长,而内存池的大小绝不会超过客户请求内存的最大值。
11、构造函数控制对象生成时的基本操作,并保证对象被初始化;析构函数摧毁一个对象并保证它被彻底清除;
12、类中的一些函数,我们不想让别人去调用它,并且还不想让让编译器去生成他,那么我们可以将它仅声明为私有的,而不去定义(实现)他们。
13、在类中,const和引用数据成员只能用初始化列表去初始化,而不能用赋值的方法。通过成员初始化列表来进行初始化总是合法的,效率也绝不低于在构造函数体内赋值,他只会更高效。另外,它简化了对类的维护,因为如果一个数据成员以后被修改成了必须使用成员初始化列表的某种数据类型,那么,我们什么也不用变。但是有一种情况下,对类得数据成员用赋值比用初始化更合理,那就是当有大量的固定类型的数据成员要在每个构造函数里以相同的方式初始化的时候。
14、static类成员永远也不会在类的构造函数初始化,静态成员在程序的运行过程中只被初始化一次。
15、初始化列表中成员列出的顺序,和他们在类中声明的顺序相同。
16、对一个对象的所有成员来说,他们的析构函数被调用的顺序,总是和他们在构造函数离被创建的顺序相反。
17、当通过基类的指针去删除派生类的对象,而基类有没有虚析构函数时,结果将是不可确定的。
18、实现虚函数需要对象附带一些额外信息,以使对象在运行时可以确定应该调用哪个虚函数。对大多数编译器来说,这个额外信息的具体形式是一个称为vptr(虚函数表指针)。vptr指向的是一个称为vtbl(虚函数表)的函数指针数组。每个有虚函数的类都附带有一个vtbl。当对一个对象的某个虚函数进行请求调用时,实际被调用的函数是根据指向vtbl的vptr在vtbl里面找到相应的函数指针来确定的。
19、当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
20、纯虚函数将产生抽象类,即是不能实例化的类(即不能创建此类型的对象)。但是有些时候,我们想让一个类成为抽象类,但刚好又没有任何纯虚函数,怎么办??那么我们可以在想要成为抽象类的类里声明一个纯虚析构函数。如virtual ~Base()=0(声明纯虚析构函数);Base::~Base(){}(纯虚析构函数的定义)
21、虚析构函数的工作方式是:最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。
22、成员函数和非成员函数最大的区别是:成员函数可以是虚拟的,而非成员函数不行。
23、名字空间带来的最大好处之一是:潜在的二义性不会造成错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试常考 C++