[英]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.