内存分配的两种方法

我们都知道内存分配有两种方法: new和malloc。他们有哪些相同点和不同点呢?

一,new是系统API函数,而malloc是库函数也即意味着在程序中调用malloc函数需要加载malloc.h头文件才能使用。

二,new创建的对象除分配内存外,还会调用类型的构造函数,同理delete会调用析构函数。如果用new赋值的指针,用free释放将有可能导致析构函数没有调用,一些变量内部生成的变量指针不能释放的问题出现。而用delete释放malloc的内存,将会由于缺少对类型本身的构造而直接析构的危险性。例如在一个类型在构造函数中用new为某个指针指定了内存,而在该类型的析构函数中释放了该指针指向的内存。

struct MyData
{
int *p;
MyData()
{
  p = new int();
}
~MyData()
{
if(p != NULL)
{
delete p;
p = NULL;
}
}
};
int main()
{
 MyData *pMyData  = new MyData;
free pMyData;
}

如果采用new -free组合,那么这个类型中的该指针指向的指针将不会被释放,而出现内存泄露。如果采用malloc -delete组合,将会出现没有为指针分配内存而直接释放的错误。


猜你喜欢

转载自blog.csdn.net/wangyhwyh753/article/details/79630576