如果我有一个std::vector存储一些东西(比如说数据),那么std::vector::clear()方法会调用容器内元素的析构函数吗?例如,如果我的数据是用vector存储的,以下代码是否有效?
char * pd;
for(vector<char *>::iterator it = data.begin(); it != data.end(); ++it) {
pd = *it;
delete pd;
}
那么,它是否多余了?因为data.clear()会做到这一点。我认为不是,也就是说需要手动释放内容。我猜想,data.clear()不会调用内容的隐式析构函数,这正确吗?这是针对C++11之前的版本。
char *
没有析构函数,但是当类型具有时,vector::clear
会调用其析构函数。 - Raxvanclear
或销毁向量,则不必担心。但是,否则我不会在向量中留下已删除对象的指针。) - James Kanze