我想將2個元素添加到vector<Node*>
中,然後清除所有元素並釋放內存。
這段代碼是否以正確的方式做到這一點?添加元素並清除C++中的指針矢量
#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);
}
爲什麼在數據似乎沒有任何「多個所有者」的情況下使用智能指針? – Simon 2010-07-26 20:13:17
@Simon:智能指針(通常)不僅在有多個所有權時有用 - 所以我假設你指的是使用'shared_ptr'?您不能將'auto_ptr'放入標準容器中,但可以將'shared_ptr'放入容器中(http://www.gotw.ca/publications/using_auto_ptr_effectively.htm)。有些人不惜一切代價避免生ptrs,我並不是建議 - 只要知道有一些解決方案可以讓你避免內存清理;並且@Jani應該自行決定何時使用它。 – Stephen 2010-07-26 20:45:23
如果您擁有明確的所有權,則shared_ptr會提供成本高昂的內存清除(循環),同時如果您尚未使用boost,也會增加鏈接時間。在你有一個對象是其他對象的所有者的情況下,範圍指針不應該是一個更好的建議嗎? – Simon 2010-07-27 05:14:11