在删除之前我必须清除std :: vector

时间:2016-08-18 19:03:11

标签: c++

到目前为止,我一直在删除矢量之前使用vector :: clear()。但这有必要吗?是不是在析构函数中调用了vector :: clear()函数?

// Consider I have this vector
std::vector<uint32_t>* myVector = new std::vector<uint32_t>(50);

... // vector gets filled

myVector->clear();  // <-- redundant??
delete myVector;
myVector = nullptr;

2 个答案:

答案 0 :(得分:9)

不,std::vector的所有元素都会在std::vector销毁后被破坏,因此使用clear是多余的。您可以查看std::vector::~vector here的文档。

此外,通常不需要像在问题中那样动态分配向量 - 只需通过

初始化
std::vector<uint32_t> myVector;
//...

然后myVector当它超出范围时,它的所有元素都将被破坏。

答案 1 :(得分:3)

不,无需手动拨打clear。当矢量被破坏时,它可能会或可能不会被内部调用,但是矢量被破坏时,矢量中的任何对象都会被破坏。