一、C\C++的内存分布
二、C++的内存管理方式
C语言动态管理内存用:malloc、calloc、realloc函数开辟空间。free函数释放空间。
char* c = (char*)malloc(100);
free(c);
c = NULL;
C++用:new关键字开辟空间。delete关键字释放空间。
int* a = new int(10);//开辟一个空间,赋值为10
delete a;
char* c = new char[10];//开辟10个连续的空间
delete[] c;//用[]开辟的空间需要delete[]释放
注:*C++开辟的方式与C开辟的方式的区别
C++有类这个东西。
malloc等函数只会开辟空间,不会调用类里的构造函数。new关键字在开辟空间后会调用类里的构造函数。
free函数释放空间不会调用类的析构函数。delete关键字在释放空间前会调用类的析构函数。
三、new和delete的底层
在使用new时,new底层会调用operator new函数,同样的,delete会调用operator delete函数。
operator new在底层调用的也是mallooc或其他函数。如果开辟空间失败,并不返回空,而是抛出异常。我们可以捕获异常。
operator delete在底层调用free函数。如果释放失败,也会抛出异常。
四、定位new
定位new:在已经分配的空间中调用构造函数初始化对象。
基本语法:
new(pointer)Type(initializer)
pointer是指向已经分配的空间的指针。
initiallizer是构造函数的参数。
Type是数据类型。