在C++中创建一个对象时,我们必须要为这个对象申请一块内存,而且要用构造函数对这块内存进行初始化。
C++中的new和delete相对于C的库函数malloc和free在这方面有很大的优势,所以我们主要讲的是运算符new和delete。
当用new来创建一个对象时,它会自动在堆里为对象分配内存并且为这段内存调用构造函数,这是一站式服务。
举个例子,如有一个类base,base *p = new base();在运行时这等价于先malloc(sizeof(base)),然后再为这段内存调用base的默认构造函数,另外new也为我们检查了内存分配是否成功的问题,也省去了我们在C中常常要对malloc的返回值进行检查的问题,是不是省事多了啊?
与new相对应的则是delete,delete会首先调用对象的析构函数,然后再释放对象的内存。我们最好在使用完delete后,将原先的指针赋为0,这样在不小心再次delete这个对象指针时也不会发生什么事。
对于数组,分配对象数组时,base *p = new base[10]; 而在销毁它们时,如果使用delete p;则只会释放第一个对象单元,正确的方法应该是delete []p;