malloc / free 和 new / delete 都是C/C++中重要的内存管理工具,它们有一些异同之处和使用时要特别留意的点。
相同点:
用于申请动态内存和释放内存。
不同点:
1、malloc / free 是C语言标准库函数,new / delete 是C++运算符;
2、new / delete 会调用创建对象的构造函数和析构函数,malloc / free 则没有这一功能;
使用时应当注意:
1、用malloc申请的内存,必须用free释放;同理,用new申请的内存,必须用delete释放;
2、用delete释放内存时,要注意区分待释放的内存是单个实体还是一个数组,它们的释放语句不同,例如:
int *p_int = new int; // p_int 指向的内存是单个int
delete p_int;
int *p_arrint = new int[100]; // p_arrint 指向的内存是一个拥有100个int的数组
delete [] p_arrint;
3、不要傻傻地对同一个指针连续用多次 malloc、new 或多次 free、delete,前者会造成内存泄漏,后者会造成未知异常。