malloc/free与new/delete的区别
“说说malloc、free和new、delete之间的区别吧。”
“malloc和free好像是C语言中常用的,new和delete好像是只有在C++中才用。”
...
主要有4点区别:
①malloc/free是函数,new/delete是运算符。
②malloc在堆上申请内存空间,new在自由存储区上申请内存空间。(关于“堆”和“自由存储区”,请看:“堆”和“自由存储区”)
③申请内存空间失败时,malloc返回NULL,new抛出std::bad_alloc异常。
④对于“对象”类型时,请注意:malloc/free不调用(构造、析构函数),这意味着,在构造函数和析构函数中的内容需要单独设计函数来完成。
举例:
①②③
malloc函数形式:void* malloc(int size)
返回值为void*,参数为int。void*表示申请的内存首地址,size表示内存空间大小(单位:字节)。
④
如图,d2的name的数值是乱码,即:构造函数中的赋值没执行,换句话说,构造函数没执行。
如图,加下setName()的调用后,d2的name有值了。
因此,“对象类型”使用malloc申请内存的时候,要单独设计函数来实现构造函数和析构函数的内容。