1.指针和数组的区别
数组是指一块连续的内存。
指针则是一个变量。
长度不同:数组的大小sizeof(数组)/sizeof(数据类型)。指针在相同的平台下类型是固定的。
赋值方式不同,数组只能一个一个元素的赋值或者拷贝,同类型的指针变量可以相互赋值
初始化不同。
2.STL常用的容器
STL包括了三类:算法、容器、迭代器
3.虚函数表和多态
虚函数 当在类中加入虚函数时编译器会向这个类中加入一个隐藏的成员变量,这个成员变量叫虚函数表指针。(4个字节)占用类对象空间。当类中虚函数大于等于1个,编译器会生成一个虚函数表
虚函数表
虚函数表指针
多态特性
4.动态内存分配
5.深拷贝浅拷贝
6.c中申请和释放内存的方法
7.C和C++的区别
8.c++中的多态是怎么实现的
9.C语言的内存分配
10.指针数组和引用的区别
11.malloc、free和new、delete的区别
a.malloc(sizeof ) 需要手动计算。new 对象 自动计算所需分配内存大小。
b.new 返回对象类型的指针。 malloc返回的是 void*,之后进行类型转换。(Task *ptask=(Task *)malloc(sizeof(*ptask)))
c.new分配失败会抛出异常,malloc分配失败返回的是NULL;
d.new 是在free store上分配内存。malloc分配的是物理内存。如果小于128,内存池分配空间。如果大于128在内存映射区间分配,在堆上分配。(1.调用operateor new 2.申请足够的空间 3.调用构造函数,初始化成员变量。通过void* operator 重载操作符)malloc刚开始是分配虚拟内存,初始化的时候分配页表,通过缺页中断分配物理内存
e.delete需要对象类型的指针(void*如果进行了强制转换,将会异常),free是void*类型的指针。(1.先调用析构函数,2.operator delete 3.释放空间)malloc分配空间会多分配一个16字节的空间(包含申请内存空间分配的大小)
11.左值引用与右值引用的区别
区别:左值引用避免对象的拷贝(函数传参)(函数返回值)
右值引用(实现移动语义)(实现完美转发)
区分左值和右值:左值可以在等号左边取地址具名(变量名、返回左值引用的函数调用,前置自增或者自减,赋值运算,复合运算,解引用等),右值只能在等号右边,不能取地址,不具名(纯右值(字面值,返回非引用类型的函数调用、后置自增、自减,算数表达式、逻辑表达式、比较表达式),将亡值(C++11新引入的,与右值引用相关的值数据类型))