在析构函数中安全地删除内存

时间:2015-02-25 21:56:23

标签: c++ memory

我有以下代码:

CCOLFile *pCOLFile = CCOLManager::getInstance()->parseFile(strCOLPath);
// ...
pCOLFile->unload();
delete pCOLFile;

内存由parseFile()函数分配,并存储在pCOLFile对象的std :: vector中。 我可以将我的代码从unload()方法移动到CCOLFile析构函数以安全地删除已分配的内存吗?

我猜测destructors甚至可能是为此而设计的?

目标是迭代std :: vector并对每个值使用delete。

这是我的CCOLFile结构:

struct CCOLFile
{
    std::string                     m_strFilePath;
    std::vector<CCOLEntry*>         m_vecEntries;
};

这是当前的unload()方法:

void                CCOLFile::unload(void)
{
    for (auto pCOLEntry : m_vecEntries)
    {
        delete pCOLEntry;
    }
    m_vecEntries.clear();
}

1 个答案:

答案 0 :(得分:-1)

如果您声明std::vector<std::unique_ptr<CColEntry>> m_vecEntries,那么您不需要unload方法;相反,在析构函数中,只需执行delete m_vecEntriesvector会清除其条目,因为它们是unique_ptr,它们会自行删除。

因此unload()在析构函数中减少到一行。