一,动态内存管理
(1)C语言和c++区别
在C语言中,我们常用malloc和calloc申请空间,用free来释放空间,而现在我们更多的情况下用new来申请空间,用delete来释放空间。
申请一个空间:
int* p2 = (int*)malloc(sizeof(int));//空间值为随机值
int* p3 = new int;//空间值为随机值
申请多个空间:
int* p4 = (int*)malloc(sizeof(int) * 10);
int* p5 = new int[10];
释放一个空间:
free(p2);
delete p3;
释放多个空间:
free(p4);
delete[ ] p5;
(2)申请空间的同时进行初始化:
int* p6 = new int(10);申请4个字节,一个空间,用()进行初始化
int* p7 = new int[10] {1, 2};申请多个空间,[ ]里面写申请空间的个数,{ }中,写初始化的值
int* p8 = new int[10] {};//默认为0,当写成这个样子的时候,默认是初始化为零,如果没有写{}则初始化为随机值(不同的编译器也有可能不同)
为什么出++中改用new来申请空间,而不用malloc?
答:因为malloc没有办法很好的支持动态申请的自定义对象初始化。
例如,用new来开辟自定义类型的空间并初始化
class A {
private: int _a;
public:
A(int a = 0)
:_a(a)
{}
}
A* P2 = new A;
A* P3 = new A(3);
delete P2;
delete P3;
A* P4 = new A[10];
delete[ ] P4;
将A类实例化为aa1,aa2,并开辟一块空间,将这两个对象放到里面:
A aa1(1);
A aa2(4);
A* P5 = new A[10]{ aa1,aa2 };
delete[] P5;
以上式子可以简写为以下代码:
A* P6