2016-08-18 49 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。當向量被銷燬時它可能會或可能不會被內部調用,但是當向量被銷燬時,向量中的任何對象都將以一種或另一種方式被銷燬。