C++动态内存管理的方式
malloc和new,free和delete
在C语言中,我们通常用malloc和free来动态的管理内存,其中malloc用来在堆上开辟空间,而free用来释放malloc或其他在堆上动态开辟内存的函数所开辟的空间。在C++中,我们用new/delete;new[]/delete[]来动态的管理内存,相比于C语言中的malloc和free,他们之间有什么差别呢?
首先,它们的调用方式不相同,其中malloc和free采用下面的方式来调用
int* p=(int*)malloc(sizeof(int)*4);
//使用malloc函数开辟4个int类型的空间
free(p);
p=NULL;
//释放上面malloc所开辟的空间
在C++中,new和new[]/delete[]和delete主要采用下面的调用方式:
int* p=new int(4); //开辟一个int类型的对象,初值为4
delete p; //释放上面所开辟的空间
int* p1=new int[4]; //开辟4个int类型的空间,无初值
delete[] p1; //释放上面所开辟的空间
另外,它们之间更重要的差别是,new和delete,new[]和delete[]才开辟空间后和释放空间前还分别调用了所开辟类型的构造函数以及析构函数。如下图所示: