c++,stl,容器析构时,无用数据对象处理,变成未初始化内存,指针对象需挨个delete并置空,复杂对象需调用特定函数,容器析构时释放所有内存
c++容器中一般存放类对象和指针,以此可以区分为对象容器和指针容器。
此处的容器还是拿vector为例。
一、当容器中存放的是对象数据时:
vector< Obj >
vector调用pop_back函数去除数据的操作,就是调用这个对象的析构函数,将这个类析构掉,只剩下内存空间,size减一。
当该vector生命周期结束后或者手动销毁时,其中的对象数据会一一调用析构函数,变成内存,然后内存会free释放掉。
对于简单的可以直接用析构函数析构的对象,直接pop或等容器一起析构是没什么问题的。
二、当容器中存放的是对象指针时:
vector<Obj *>
需要注意,指针对象是c++的默认类型,有其释放机制,程序员需要注意的是指针指向的堆空间内存。
容器再析构自身和析构数据指针时不会注意到指针指向的堆空间数据,所以在释放指针型容器时如果不做特殊处理,必然会导致内存泄漏。
特殊处理:
对指针的处理需要注意两个地方,
1、delete释放堆内存。
2、赋值运算符将其置