在C ++中使用delete []或删除操作所需的try-catch吗?

时间:2017-10-26 05:18:19

标签: c++ exception-handling delete-operator

我们正在Visual Studio 2005中开发一个应用程序,在代码审查中我从评论者那里得到了以下代码片段的这个问题

void FreeResourceForElements(void)
{
    try
    {
        delete[] m_cpMemPool;
    }
    catch(...)
    {
        // statement for printing error message in log
    }
}

根据评论者的说法,在C ++语言中,删除或删除[]操作保证不会抛出异常,因此不需要在这里使用try-catch,并且catch块变为死代码。然而,当我在互联网上搜索任何标准参考来确认他的观点时,遗憾的是我找不到任何。所以我在这里提出这个问题。请指教。

1 个答案:

答案 0 :(得分:4)

delete[]调用每个数组元素的析构函数。如果你的代码库有一个规则,析构函数必须是noexcept或必须已经处理异常以防止它们从析构函数中传播出来(并且实际上强制执行该规则),那么就不必包装{{1}在try-catch块中。