malloc是C语言标准库stdlib.h中的函数,new是C++中的关键字,二者均用于在堆中开辟动态内存。
两者的用法如下:
1.malloc:
ptr = (类型*)malloc(内存大小)
例如:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int* p = NULL;
if (!(p = (int*)malloc(sizeof(int))))
exit(1);
*p = 1;
cout << *p << endl;
free(p);
return 0;
}
结果输出为1.
2.new:
ptr = new type
例如:
#include <iostream>
using namespace std;
int main()
{
int* p = NULL;
if (!(p = new int))
exit(1);
*p = 1;
cout << *p << endl;
delete(p);
return 0;
}
结果输出为1.
malloc()和new用法基本一致,区别在于new可以创建对象,而malloc()只能用于开辟内存空间。
简单地说,使用new和delete时,程序会自动执行构造函数和析构函数,而malloc()和free()则不会。如一下两段代码:
#include<iostream>
#include<cstdlib>
using namespace std;
class Num
{
public:
int num;
Num()
{
num = 1;
}
void print_num()
{
cout << num;
}
};
int main()
{
Num* n = NULL;
if (!(n = (Num *)malloc(sizeof(Num))))
{
exit(1);
}
n->Num::print_num();
free(n);
return 0;
}
#include<iostream>
#include<cstdlib>
using namespace std;
class Num
{
public:
int num;
Num()
{
num = 1;
}
void print_num()
{
cout << num;
}
};
int main()
{
Num* n = NULL;
if (!(n = new Num))
{
exit(1);
}
n->Num::print_num();
delete n;
return 0;
}
第一段代码输出了一个奇怪的数,而第二段代码则输出1.