new/delete和malloc/free的区别是什么?
相关(重复?):在什么情况下我使用malloc vs new?
new/delete和malloc/free的区别是什么?
相关(重复?):在什么情况下我使用malloc vs new?
当前回答
此代码用于使用delete关键字或free函数。但是当创建一个 指针对象使用'malloc'或'new'释放对象内存使用 删除即使对象指针也可以调用类中的函数。后 使用free而不是delete,在free语句之后也可以, 但是当两者同时使用时,只有指针对象不能调用类中的函数。 代码如下:
#include<iostream>
using namespace std;
class ABC{
public: ABC(){
cout<<"Hello"<<endl;
}
void disp(){
cout<<"Hi\n";
}
};
int main(){
ABC* b=(ABC*)malloc(sizeof(ABC));
int* q = new int[20];
ABC *a=new ABC();
b->disp();
cout<<b<<endl;
free(b);
delete b;
//a=NULL;
b->disp();
ABC();
cout<<b;
return 0;
}
输出: 你好 嗨 0 x2abfef37cc20
其他回答
new/delete是c++, malloc/free来自优秀的老C。
在c++中,new调用对象的构造函数,delete调用析构函数。
malloc和free来自于OO之前的黑暗时代,它们只分配和释放内存,而不执行对象的任何代码。
在c++中,new/delete函数相应地调用构造函数/析构函数。
Malloc /free只是从堆中分配内存。新建/删除也分配内存。
有几件事是new做的,malloc没有:
New通过调用该对象的构造函数来构造该对象 New不需要对已分配的内存进行类型转换。 它不需要分配大量的内存,而是需要大量的内存 要构造的对象。
因此,如果使用malloc,则需要显式地执行上述操作,这并不总是实际的。此外,new可以重载,但malloc不能。
总之,如果你使用c++,尽量使用new。
New是一个操作符,malloc()是一个函数。 New返回精确的数据类型,而malloc()返回void * (void类型指针)。 Malloc(),内存没有初始化,默认值是垃圾,而在new的情况下,内存用默认值初始化,就像int的情况下用'zero(0)'。 delete和free()都可以用于'NULL'指针。
New和delete是c++中的操作符;也可以重载。 Malloc和free是c中的函数;
Malloc返回空PTR失败时,而新的抛出异常。
由malloc返回的地址需要再次按类型转换,因为它返回(void*)malloc(size) 返回类型化指针。