3、尽量以new和delete取代malloc和free
1、malloc和free
malloc和free是C语言中申请和释放动态内存的函数,malloc申请在堆上寻找一块指定大小的内存,返回一个void类型的指针,指向该内存的首地址;若申请失败则返回空指针NULL。程序结束,需要使用free()调用之前的指针来释放之前申请的动态内。
2、为啥要取代malloc和free
C++与C的区别之一是C是面向过程的编程,而C++是面向对象的。C++中,会自定义很多类class,每个类都有自己的构造函数与析构函数来创建和销毁对象。而用malloc对这些类对象进行动态内存申请时,他可以申请指定大小的内存,但是不会调用类的构造函数,这给对象的初始化带来了困难。
string *stringArray1 = static_cast<string *>(malloc(10 * sizeof(string)));
如上,申请了10个string对象的内存,地址保存在stringArray1中。没有调用构造函数,没有进行对象的初始化,无法对这块内存欲要保存的对象进行初始化。
同样,用free对这些类对象进行动态内存释放时,不会调用类的析构函数。也就是说,他只是释放了指针指向的这块内存,没有通过调用析构函数合法的销毁对象,对对象的本身配置的内存没有操作,可能导致内存泄漏。
3、以new和delete取代malloc和free
用new和delete操作符是C++实现申请和释放动态内存的一种方法,他们在申请和释放动态内存的同时,会调用类的构造函数和析构函数,比malloc和free更方便。
另外,混用new、delete和malloc、free时,可能引发未知的错误,或给代码的阅读、维护带来一定的困扰。