假设我有一个 std::vector<Obj *> objs
(出于性能原因,我的指针不是实际的 Obj
s)。
我用 obj.push_back(new Obj(...));
填充它反复。
完成后,我必须delete
被推回的元素。一种方法是这样做:
for (std::vector<Obj *>::iterator it = objs.begin(); it != objs.end(); ++it) {
delete *it;
}
但是,如果我可以使用 for_each
我很感兴趣算法做同样的事情:
#include <algorithm>
...
for_each(objs.begin(), objs.end(), delete);
你怎么看?
最佳答案
您的问题是 delete
不是一个函数,而是一个关键字,因此您不能获取它的地址。
在 C++0x 中,将有一个 std::default_delete
类(由 std::unique_ptr
使用),您可以使用它,或者 - 作为每个人的说 - 自己写一个是微不足道的(标准的也会引发编译错误,如果你试图删除一个不完整的类型)。
#include <vector>
#include <algorithm>
#include <memory>
int main()
{
std::vector<int*> vec;
std::for_each(vec.begin(), vec.end(), std::default_delete<int>());
}
关于c++ - 我可以通过 for_each <algorithm> 在 C++ 中的指针 vector 上调用 `delete` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505343/