我有以下代码:
CCOLFile *pCOLFile = CCOLManager::getInstance()->parseFile(strCOLPath);
// ...
pCOLFile->unload();
delete pCOLFile;
内存由 parseFile() 函数分配并存储在 pCOLFile 对象的 std::vector 中。 我可以将我的代码从 unload() 方法移动到 CCOLFile 析构函数以安全地删除分配的内存吗?
我猜析构函数可能就是为此而设计的?
目标是迭代 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();
}
最佳答案
如果声明std::vector<std::unique_ptr<CColEntry>> m_vecEntries
那么你不需要 unload
方法;相反,在析构函数中,只需执行 delete m_vecEntries
. vector
将清除其条目,因为它们是 unique_ptr
的,他们会删除自己。
因此 unload()
在析构函数中减少到一行。
关于c++ - 在析构函数中安全地删除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730439/