2016-08-18 42 views
2

到目前为止,我已经删除矢量之前,使用矢量::明确()始终。但是有必要吗?无论如何,不​​是在析构函数中调用vector :: clear()函数吗?我必须删除它之前清除的std ::矢量

// 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; 
+8

这条线是不是是多余的关于你的代码的唯一的事情! –

+5

为什么地球上你正在使用'new?'实例化一个'std :: vector'?你是否有特殊的理由这么做? –

+3

C++不是Java。没有必要调用'new'来创建向量。 – PaulMcKenzie

回答

8

不,std::vector的所有元素都销毁std::vector因此使用clear是多余的。你可以看到std::vector::~vector here的文档。

此外,动态地分配你的问题所做的载体通常是不必要的 - 通过

std::vector<uint32_t> myVector; 
//... 

然后myVector当它超出范围的所有它的元素将被破坏只是初始化。

3

不,不需要手动拨打clear。当向量被销毁时它可能会或可能不会被内部调用,但是当向量被销毁时,向量中的任何对象都将以一种或另一种方式被销毁。