我想将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