list<class T>::pop_back是否调用T类自己里面的析构函数?
我创建了一个T结构(包含一个整数i,和一个int* p),它的构造函数是
p=(int*)malloc(i*sizeof(int))//在指针p上,分配i个整数长度的内存。
当然,对应的析构函数里面也应该有一个free(p)
现在我创建了一个T的list
当我不断的把新的T结构的个体向这个list里面push,然后再从list里面pop_back
请问pop_back是
1.直接作废掉T结构里面的成员变量呢(也就是整数i和int* p作废,但是之前malloc的内存空间还没有释放),
2.还是运行T结构的析构函数(释放了构造之时分配的内存)?
我看stl源码剖析里面,说list::pop_back函数是基于list::erase设计的,不过我没找到erase函数到底是调用T类别自己的析构函数,还是直接作废T的成员变量,这个我不清楚。
求解答
[解决办法]
你要在=赋值(或者复制构造函数)的时候注意:
比如A=B;
你的A建立起来之后,也要malloc,然后析构的时候会调用你自己的析构函数。