到目前为止,我一直在删除矢量之前使用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;
答案 0 :(得分:9)
不,std::vector
的所有元素都会在std::vector
销毁后被破坏,因此使用clear
是多余的。您可以查看std::vector::~vector
here的文档。
此外,通常不需要像在问题中那样动态分配向量 - 只需通过
初始化std::vector<uint32_t> myVector;
//...
然后myVector
当它超出范围时,它的所有元素都将被破坏。
答案 1 :(得分:3)
不,无需手动拨打clear
。当矢量被破坏时,它可能会或可能不会被内部调用,但是矢量被破坏时,矢量中的任何对象都会被破坏。