引用与指针区别,malloc/free与new/delete的区别详解
引用和指针都是C/C++中重要的概念,它们都可以用来访问内存中的数据。然而,它们在使用方式、内存管理等方面存在一些区别。
引用与指针的区别
- 定义方式: 引用是一个别名,使用
&符号进行定义;指针是一个变量,存储另一个变量的内存地址,使用*符号进行定义。 - 初始化: 引用在定义时必须进行初始化,并且一旦初始化后就不能再改变引用的绑定;指针可以在定义时不进行初始化,也可以在后续改变指针的指向。
- 空值: 引用必须始终引用一个有效的对象,不能为
NULL;指针可以为空,即指向空地址NULL。 - 使用方式: 引用使用起来更加简洁,可以像使用变量一样直接使用;指针需要通过解引用操作符
*来获取指针所指向的值。 - 内存管理: 引用不需要进行内存分配和释放,由编译器自动处理;指针需要手动进行内存管理,需要使用
malloc/free或new/delete等操作。
malloc/free与new/delete的区别
- 申请内存的方式:
malloc/free是C语言中的函数,用于动态分配和释放内存;new/delete是C++中的运算符,用于动态分配和释放内存。 - 返回类型:
malloc返回void指针,需要进行强制类型转换;new返回所分配类型的指针,不需要进行强制类型转换。 - 内存分配失败的处理:
malloc在内存分配失败时返回NULL;new在内存分配失败时会抛出std::bad_alloc异常。 - 构造和析构函数的调用:
malloc/free只是分配和释放内存,不会调用对象的构造和析构函数;new会先调用构造函数进行对象的初始化,delete会先调用析构函数进行对象的清理。 - 数组的分配:
malloc/free可以分配任意大小的内存块,适用于数组的分配;new/delete可以用于分配和释放单个对象,也可以用于分配和释放数组。使用new[]和delete[]可以分配和释放数组。
总结
引用和指针的主要区别在于定义方式、初始化、空值、使用方式和内存管理等方面;malloc/free和new/delete的主要区别在于申请内存的方式、返回类型、内存分配失败的处理、构造和析构函数的调用以及数组的分配等方面。
原文地址: https://www.cveoy.top/t/topic/qmxE 著作权归作者所有。请勿转载和采集!