c ++内存管理

Kai*_*elm 1 c++ memory pointers new-operator

这是删除使用new创建的longs和object的地图的好方法

// 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();
Run Code Online (Sandbox Code Playgroud)

Mar*_*ork 10

是.使用boost :: ptr_map

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

data.insert("Plop", new BigObject);
Run Code Online (Sandbox Code Playgroud)

当数据超出范围时,它会删除其所有value成员.
此外,对于算法,所有成员都作为对象(不是指针)的引用返回,因此使用标准算法比使用std :: map <std :: string,BigObject*>更容易去除使用前的memebrs.

人们不得不质疑为什么你有一个指向int/long的指针的地图?将值存储在地图中会不会更容易?

  • @Kaiser Wilhelm; 对我来说,手动完成所有这些工作似乎有些过分.你永远不应该打电话给删除.如果使用正确的对象,则内存管理是自动的.指针是一个肯定的迹象,你会在某些时候弄错(**因为它们没有与指针相关的所有权语义**)智能指针和容器确保你的代码易于阅读和异常安全以及特定的智能指针是一种记录所有权的方式. (3认同)