c++ - 我可以通过 for_each <algorithm> 在 C++ 中的指针 vector 上调用 `delete` 吗?

标签 c++ memory foreach delete-operator

假设我有一个 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/

相关文章:

c++ - 使用前导和尾随空格 boost spirit 解析字符串

c++ - 存储 std::list 元素的地址;内存

memory - CUDA 结果可以存储在 OpenGL 可访问的纹理中吗?

node.js - Node JS/如何减慢 forEach 循环?

c++ - Boost Spirit - 修剪最后一个字符和分隔符之间的空格

c++ - 如何在 C++ 中使用传入的值作为数组索引?

c++ - 将一行数字数据读入一个数组,然后将下一行读入一个变量。 C++

c - 使用 opengl 将 Assets (图像)加载到内存中的最佳方式是什么?

php - 如何使用 for 循环和 union all 按列进行分组

javascript - 如何在没有箭头功能的情况下编写此函数