virtual表示一个“晚绑定”的概念,也就是说,在程序实际运行的时候,才确定调用哪个函数.编译器根据virtual确定函数调用的层次性。更直观的说,不加virtual,你就甭想继承了。特殊的是,只有构造函数不用加virtual
n是m的一个引用(reference),m是被引用物(referent)。
n相当于m的别名(绰号),对n的任何操作就是对m的操作。
所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
当你重载某个操作符时,你应该使用引用。
引用的主要功能是传递函数的参数和返回值.
C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递
"引用传递"的性质象"指针传递",而书写方式象"值传递"。
指针能够毫无约束地操作内存中的任何东西,尽管指针功能强大,但是非常危险。
如果的确只需要借用一下某个对象的"别名",那么就用"引用",而不要用"指针",以免发生意外。引用就是传递的原始变量,指针传递的是变量的地址,引用主要用于函数参数的传递,相对于传值,可以节省内存空间;指针可以直接传递变量地址,可以在自由操作数组变量.
new和malloc的区别
1、new 是c++中的操作符,malloc是c 中的一个函数
2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。
4、new 和 malloc效率比较
new 有三个字母, malloc有六个字母
new可以认为是malloc加构造函数的执行。
new出来的指针是直接带类型信息的。
而malloc返回的都是void指针。
new delete 是运算符,malloc,free是函数
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。
new delete在实现上其实调用了malloc,free函数。
new operator除了分配内存,还要调用构造函数。
malloc函数只是负责分配内存。
阅读(719) | 评论(0) | 转发(0) |