1、在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。
注意: new和delete是运算符,不是函数,因此执行效率高。
2、虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算符。new和delete运算符的一般使用格式为:
malloc free与new delete对比
(1)分配基础类型
C的做法
1. int *p = (int *)malloc(sizeof(int)); 2. *p = 10; 3. free(p);
C++的做法
1. int *p2 = new int(10); // 2. delete p2;
(2)分配数组
C的做法
1. int *p = (int *) malloc(sizeof(int) * 10); //int array[10]; 2. 3. free(p);
C++的做法
1. int *pArray = new int[10]; 2. 3. delete [] pArray; 4.
(3)分配对象
1. class Test 2. { 3. public: 4. Test(int _a) 5. { 6. a = _a; 7. } 8. 9. protected: 10. 11. private: 12. int a; 13. }
//c的做法
1. Test *pT1 = (Test *)malloc(sizeof(Test)); 2. 3. free (pT1);
//C++的做法
1. Test *pT2 = new Test(10); 2. 3. delete pT2;
new delete新建类与malloc free的区别:
new 在调用的时候会调用类的构造函数; delete在调用的时候胡调用类的析构函数
3、malloc分配的内存可以delete吗? new分配的内存可以free吗?
(1)对于基础类型和数组,malloc分配的内存可以delete, new分配的内存可以free
1. int *p = (int *)malloc(sizeof(int)); 2. *p = 10; 3. //free(p); 4. delete(p); 5. 6. int *p2 = new int(10); 7. //delete p2; 8. free(p2); 9. 10. 11. int *p = (int *) malloc(sizeof(int) * 10); //int array[10]; 12. //free(p); 13. delete[] p; 14. 15. int *pArray = new int[10]; 16. //delete [] pArray; 17. free(pArray);
在编译器上运行是不报错的。
(2)对于类类型,malloc分配的内存不可以delete, new分配的内存不可以free