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

标签 c++ memory

我有以下代码:

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/

相关文章:

c++ - 错误服务 irc mysql

C++ "Death Battle"游戏无法正确记录武器使用次数

c++ - 创建指向 vector<vector<bool>> 中元素的指针

c++ - "else"DevC++ 之前的预期主表达式

pointers - 为什么 Go 禁止获取 (&) map 成员的地址,而允许 (&) slice 元素?

linux - 我可以分配一个大的和保证连续范围的物理内存(100MB)吗?

c - gcc 的缓冲区溢出示例

c++ - 传递参数为 `const` 的奇怪效果

java - Java中如何处理大数组

java - 编写高性能Cache