- C++ 引用和指针的区别
- 指针一般指的是某块内存的地址,通过这个地址,我们可以寻址到这块内存;而引用是一个变量的别名,例如我们给小明起了个外号
- 指针可以为空,引用不能为空
- 引用
- 引用被称为变量的别名,它不能脱离被引用对象独立存在
- 引用变量在功能上等于一个指针常量,即一旦指向某一个单元就不能在指向别处
- 在底层,引用变量由指针按照指针常量的方式实现
- 引用看做是通过一个常量指针来实现的,它只能绑定到初始化它的对象上
- 指针
- 指针p也是对象,它同样有地址&p和存储的值p,只不过,p存储的数据类型是数据的地址。如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加解引用操作符"*",即*p。
- 引用和指针,在内存中都是占用4个字节(32bits系统中)的存储空间。指针和引用存放的都是被引用对象的地址,都必须在定义的同时进行初始化。
- C++中 virtual 与 inline 的含义分别是什么?
- 在基类成员函数的声明前加上virtual关键字,意味着将该成员函数声明为虚函数。
- inline与函数的定义体放在一起,使该函数称为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。
- 虚函数的特点;
- 如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。
- 内联函数的特点;
- 使用内联函数的目的是为了提高函数的运行效率。
- 内联函数体的代码不能过长,因为内联函数省去调用函数的时间是以代码膨胀为代价的。
- 内联函数不能包含循环语句,因为执行循环语句要比调用函数的开销大。
- C++ 有了 malloc/free 为什么还要 new/delete
- malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++的运算符。它们都可用于申请动态内存和释放内存。
- 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
- 由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free。
- 因此 C++语言需要一个能完成动态内存分配和初始化工作的运算符 new,以及一个能完成清理与释放内存工作的运算符 delete。
- 注意 new/delete 不是库函数。