new/delete和malloc/free的区别是什么?

相关(重复?):在什么情况下我使用malloc vs new?


当前回答

1.New syntex比malloc()简单

2.New /delete是一个运算符,其中malloc()/free() 是一个函数。

3.New /delete执行速度比malloc()/free()快,因为编译器直接粘贴了新的程序集代码。

4.我们可以通过操作符重叠来改变程序中的new/delete含义。

其他回答

new和malloc之间的主要区别是new调用对象的构造函数,而对应的delete调用对象的析构函数。

还有其他不同之处:

New是类型安全的,malloc返回void*类型的对象 new在错误时抛出异常,malloc返回NULL并设置errno New是运算符,可以重载,malloc是函数,不能重载 New[]分配数组,比malloc更直观和类型安全 malloc派生的分配可以通过realloc调整大小,新派生的分配不能调整大小 malloc可以分配一个n字节的内存块,new必须被要求分配一个数组,比如说char类型

看区别,总结是malloc是C式的,new是c++式的。使用适合您代码库的版本。

虽然使用不同的内存分配算法实现new和malloc是合法的,但在大多数系统上,new是使用malloc在内部实现的,不会产生系统级的差异。

最相关的区别是,new操作符分配内存,然后调用构造函数,而delete操作符调用析构函数,然后释放内存。

此代码用于使用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可以被覆盖,malloc/free不能。

此外,每个类型都可以重写new和delete。

new/delete是c++, malloc/free来自优秀的老C。

在c++中,new调用对象的构造函数,delete调用析构函数。

malloc和free来自于OO之前的黑暗时代,它们只分配和释放内存,而不执行对象的任何代码。