内存管理
自由存储的问题主要包括:
- 对象泄露(leaked object):使用new,但是忘了用delete释放掉分配的对象
- 提前释放(premature deletion):在尚有其他指针指向该对象并且后续仍会使用该对象的情况下过早的delete
- 重复释放(double deletion):同一对象被释放两次,两次调用对象的析构函数(若有的话)
编程建议
- 若非万不得已不要把对象放在自由存储上,优先使用作用域内的变量
- RAII规则:当在自由存储上构建对象时,把它的指针放在一个管理器对象(句柄)中,此类对象通常含有一个析构函数,可以确保释放资源。
vector容器是一个实例,其元素位于自由存储上,但是它把分配和释放资源的操作都限定在其内部进行。