bod*_*ydo 16 c++ memory containers vector delete-operator
我搜索了StackOverflow但找不到这个问题的答案.
假设我有一个std::vector<Day *> vector_day- 即指向Day对象的指针向量.现在我push_back到vector_day很多元素:
vector_day.push_back(new Day(12));
vector_day.push_back(new Day(99));
vector_day.push_back(new Day(71));
...
Run Code Online (Sandbox Code Playgroud)
现在在某些时候我不再需要了vector_day.什么是释放记忆的正确方法?
这是正确的方法:
for (std::vector<Day *>::iterator i = vector_day.begin(); i != vector_day.end(); ++i) {
delete *i;
}
Run Code Online (Sandbox Code Playgroud)
这不会使每次删除时的向量无效吗?我很迷茫.
Tyl*_*nry 18
如果您不是绝对需要,最好的方法是不要将指针放在向量中.
但是如果你确实需要有一个指针向量,那么你做它的方式就好了(但是.clear()后面的矢量,如果它不会被立即销毁,那么它就不会充满悬空指针)
该声明
delete *it;
Run Code Online (Sandbox Code Playgroud)
对迭代器没有影响.它不会更改迭代器,使迭代器无效,也不会从集合中删除迭代器引用的指针.所有这一切都是释放迭代器引用的指针所指向的内存.指针本身必须单独从集合中删除.
另一种 C++ 方法是定义一个辅助结构:
struct delete_ptr { // Helper function to ease cleanup of container
template <typename P>
void operator () (P p) {
delete p;
}
};
Run Code Online (Sandbox Code Playgroud)
然后使用算法:
std::for_each(vector_day.begin(), vector_day.end(), delete_ptr());
vector_day.clear();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13401 次 |
| 最近记录: |