我有以下代码:
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();
}
答案 0 :(得分:-1)
如果您声明std::vector<std::unique_ptr<CColEntry>> m_vecEntries
,那么您不需要unload
方法;相反,在析构函数中,只需执行delete m_vecEntries
。 vector
会清除其条目,因为它们是unique_ptr
,它们会自行删除。
因此unload()
在析构函数中减少到一行。