1、const
2、static
3、volatile
4、extern
5、new & malloc
6、delete & delete[]
7、strlen & sizeof
8、内存对齐
9、零值比较
10、指针和引用的区别
11、指针与数组
12、指针类型问题
13、智能指针是怎么实现的?什么时候改变引用计数?
构造函数中计数初始化为1;
拷贝构造函数中计数值加1;
赋值运算符中,左边的对象引用计数减一,右边的对象引用计数加一;
析构函数中引用计数减一;
在赋值运算符和析构函数中,如果减一后为0,则调用delete释放对象。
share_prt与weak_ptr的区别?
14、c++多态性和虚函数表
C++多态的实现?
虚函数的作用?
虚函数用于实现多态,这点大家都能答上来但是虚函数在设计上还具有封装和抽象的作用。比如抽象工厂模式。
动态绑定是如何实现的?
静态多态和动态多态。静态多态是指通过模板技术或者函数重载技术实现的多态,其在编译器确定行为。动态多态是指通过虚函数技术实现在运行期动态绑定的技术。
虚函数表
虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的?
编译器为每一个类维护一个虚函数表,每个对象的首地址保存着该虚函数表的指针,同一个类的不同对象实际上指向同一张虚函数表。
纯虚函数如何定义,为什么对于存在虚函数的类中析构函数要定义成虚函数
析构函数能抛出异常吗
构造函数和析构函数中调用虚函数吗?
内联函数有什么优点?内联函数与宏定义的区别?
C++内存管理
STL里的内存池实现
STL里set和map是基于什么实现的。红黑树的特点?
STL里的其他数据结构和算法实现也要清楚
这个问题,把STL源码剖析好好看看,不仅面试不慌,自己对STL的使用也会上升一个层次。
必须在构造函数初始化式里进行初始化的数据成员有哪些
模板特化
定位内存泄露
(1)在windows平台下通过CRT中的库函数进行检测;
(2)在可能泄漏的调用前后生成块的快照,比较前后的状态,定位泄漏的位置
(3)Linux下通过工具valgrind检测
手写strcpy,memcpy,strcat,strcmp等函数