动态制造对象
new: 动态内存分配,制造一个对象
当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事:
- 向堆上申请一块内存空间(做够容纳对象A大小的数据)(operator new)
- 调用构造函数 (调用A的构造函数(如果A有的话))(placement new)
- 返回正确的指针
delete:收回该对象
当我们delete的时候也是如此,比如我们delete p的时候,其行为如下:
- 定位到指针p所指向的内存空间,然后根据其类型,调用其自带的析构函数(内置类型不用)
- 然后释放其内存空间(将这块内存空间标志为可用,然后还给操作系统)
- 将指针标记为无效(指向NULL)
new时先分配空间再初始化
new int;//分配个int的对象的内存
new int[10];//分配十个int内存
delete时先析构再收回空间
delete p; //删除单个
delete[] p; //删除一组,如 int[10]
int * p = new int[10]; //申请10个int内存给p所指,会把字节数也记录下来
需要用delete[]删除