引用与指针、malloc/free与new/delete的区别详解
引用与指针的区别:
- 定义方式:引用是一个别名,使用'&'符号进行定义;指针是一个变量,用于存储其他变量的地址,使用'*'符号进行定义。
- 空值:引用必须在定义时初始化,并且不能为null或空值;指针可以为空,即指向null。
- 重定义:引用一旦绑定到一个对象,就不能再绑定到其他对象;指针可以通过重新赋值来指向不同的对象。
- 内存访问:引用不需要解引用即可访问对象;指针需要通过解引用操作符'*'来访问对象。
- 指针算术运算:指针可以进行算术运算,如加法、减法等;引用没有指针算术运算。
malloc/free与new/delete的区别:
- 分配内存的方式:malloc/free是C语言中的函数,用于动态分配和释放内存;new/delete是C++中的运算符,也用于动态分配和释放内存。
- 分配的对象类型:malloc/free可以分配任意类型的内存,但是返回的是void*指针,需要进行强制类型转换;new/delete用于分配和释放对象的内存,并且会调用对象的构造函数和析构函数。
- 内存分配失败处理:malloc在分配内存失败时返回NULL;new在分配内存失败时会抛出std::bad_alloc异常。
- 数组的分配:malloc/free可以用于分配数组,但是需要手动计算空间大小和释放;new/delete可以用于分配和释放数组,会自动计算空间大小和调用对象的构造函数和析构函数。
- 内存分配的方式:malloc/free使用的是C语言的堆内存分配方式;new/delete使用的是C++的自由存储区(堆)的内存分配方式。
原文地址: https://www.cveoy.top/t/topic/qm1d 著作权归作者所有。请勿转载和采集!