[英]Add elements and clear a vector of pointers in C++
我想向vector<Node*>
添加2個元素,然后清除所有元素並釋放內存。
這段代碼是否以正確的方式執行此操作?
#include <stdlib.h>
#include <iostream>
#include <vector>
using namespace std;
class Node {
public:
int value;
// ...and some other fields and methods...
};
int main(int argc, char** argv) {
Node* n = new Node;
n->value = 20;
vector<Node*> v;
v.push_back(n);
n = new Node;
n->value = 52;
v.push_back(n);
for (vector<Node*>::iterator i = v.begin(); i != v.end(); i++) {
cout << (*i)->value << endl;
delete *i;
*i = NULL;
}
v.clear();
return (EXIT_SUCCESS);
}
它看起來很好。 我會改變一些事情(主觀上):
*i = NULL; // This is unnecessary.
然后我會避免重復使用n
(實際上,我完全避免使用它):
v.push_back(new Node);
v.back()->value = 20;
v.push_back(new Node);
v.back()->value = 52;
此外,您可能需要考慮智能指針來跟蹤您的記憶。 請參閱shared_ptr和ptr_vector 。
這將做你期望的。 但是, clear()
是完全沒必要的,因為當你離開當前作用域之后, vector
將被銷毀(在這種情況下也恰好是函數的結尾和程序的結尾)。 如果你打算保持vector
來做更多的事情,那么clear()
將從vector
刪除所有指針。 事實上, vector
正在被摧毀,因此調用clear()
沒有意義。
另外,我的討厭者想說你應該在你的循環而不是i++
使用++i
,因為i++
創建了一個臨時的,編譯器無法優化掉(因為你正在處理一個重載的運算符)。 此外,由於您只是在刪除其中的所有內容后立即銷毀該vector
,因此將其所有元素設置為NULL
並沒有多大意義。 如果你要重新使用元素而不是清除或破壞vector
,那么這將是一個好主意。 但在這種情況下,它只是效率低下。
是的有效。
一些評論:
vector<Node>
; 如果你需要它們,最好使用智能指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.