0

我只想知道这是否会正确释放数据。

伪代码:

std::map<std::string, ClassPointer*>::iterator tempIterator;

    for(tempIterator = directory.begin(); tempIterator < directory.end; 
        tempIterator++)
        delete &tempIterator;
4

3 回答 3

4

由于目录存储原始指针,因此您有责任在必要时删除这些指针。

std::map<std::string, ClassPointer*>::iterator tempIterator;

for(tempIterator = directory.begin(); tempIterator < directory.end(); 
    tempIterator++)
{
    delete tempIterator->second;
}

始终,更好的解决方案是在 STL 容器中使用智能指针:

 std::map<std::string, std::shared_ptr<ClassPointer>> directory;
于 2013-01-21T04:30:13.790 回答
2

如果ClassPointer*用 分配new[],这段代码可能无法正常工作。使用智能指针是一个更好的主意。

仅供参考,应该是

for (auto tempIterator = directory.begin(); tempIterator != directory.end(); 
    ++tempIterator)
于 2013-01-21T04:06:24.013 回答
1

正确的方法是:

for (
    std::map<std::string, ClassPointer*>::iterator it = directory.begin()
  , last = directory.end()     // avoid call to end() every time
  ; it != last                 // use operator != (NOT operator <)
  ; ++it                       // prefer prefix increment for iterators!
  ) delete it->second;         // iterator points to std::pair actually!

或 C++11 方式:

for (auto& item : directory) delete item.second;

顺便说一句,这只会释放一个类指针,而不是一个映射元素!(因此地图中的指针无效,但项目仍保留在地图中)

于 2013-01-21T04:11:54.397 回答