C++ 内存管理

标签 c++ memory pointers new-operator

这是删除用 new 制作的 longs 和 objects 映射的好方法吗

// iterate over the map
for (std::map<unsigned long, Object*>::iterator it = objects.begin(), it_end = objects.end(); it != it_end; ++it)
{
    Object* temp = it->second;
    if(temp)
        delete temp;
}

// clear the map
objects.clear();

最佳答案

是的。使用 boost::ptr_map

boost::ptr_map<std::string, BigObject>   data;

data.insert("Plop", new BigObject);

当数据超出范围时,它会删除其所有 value 成员。
同样对于算法,所有成员都作为对对象的引用(而不是指针)返回,因此与标准算法一起使用比需要取消引用的 std::map 更容易使用前的内存。

有人可能会质疑,为什么您一开始就有一个指向 int/long 的指针映射?将值存储在 map 中不是更容易吗?

关于C++ 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7095127/

相关文章:

c++ - 指针与引用返回类型

c++ - 返回指向结构的指针,如何自动释放内存?

C++ 指向函数参数指针的指针

c++ - Memcached 如何确保它在内存中的页面不会被其他页面换出?

c++ - 精确到 Qstring 的数字

c++ - 作为 Windows 服务运行应用程序报告 COM 错误 80040154

Python:垃圾收集器的行为

python - 读取 3.2 GB 文件时 Pandas/Python 内存峰值

c++ - 需要帮忙。 C++ Z :\Dynamic Allocation. cpp(18):错误 C2440: '=':无法从 'int' 转换为 'int *'

c++ - C++ 零(空)指针应该返回 false 吗?