我们正在Visual Studio 2005中开发一个应用程序,在代码审查中我从评论者那里得到了以下代码片段的这个问题
void FreeResourceForElements(void)
{
try
{
delete[] m_cpMemPool;
}
catch(...)
{
// statement for printing error message in log
}
}
根据评论者的说法,在C ++语言中,删除或删除[]操作保证不会抛出异常,因此不需要在这里使用try-catch,并且catch块变为死代码。然而,当我在互联网上搜索任何标准参考来确认他的观点时,遗憾的是我找不到任何。所以我在这里提出这个问题。请指教。
答案 0 :(得分:4)
delete[]
调用每个数组元素的析构函数。如果你的代码库有一个规则,析构函数必须是noexcept
或必须已经处理异常以防止它们从析构函数中传播出来(并且实际上强制执行该规则),那么就不必包装{{1}在try-catch块中。