直接管理内存——new和delete
一、运算符new
1. 使用new动态分配对象
- 在自由空间分配的内存是无名的,故new无法为其分配的对象命名,而是返回一个指向该对象的指针
- int *pi = new int; //pi指向一个动态分配的、未初始化的无名对象
- 表达式“new int”:①在自由空间构造一个 int 型对象;②返回指向该对象的指针
2. 使用new动态分配并初始化对象
- int *pi1 = new int; //默认初始化,*pi1的值未定义
- int *pi2 = new int(); //对动态分配的对象进行值初始化,*pi2的值为0
- int *pi3 = new int(24) //直接初始化,pi3指向的对象的值为24
- int *pi4 = new int{24} //同上
注:对于定义了自己的构造函数的类类型来说,值初始化和默认初始化的效果是一样的;但对于内置类型来说,值初始化的内置类型对象有着良好定义的值,而默认初始化的对象的值是未定义的。
二、运算符delete
1. 传递给delete的指针必须指向动态分配的内存,或者是一个空指针
2. const对象是可以销毁的
3. 空悬指针:当delete一个指针后,该指针就变为空悬指针了