14 January 2024

C++ 核心指南目录

“Don’t place all cleanup actions at the end of a function and goto exit”

理由

goto 很容易导致错误。这个技术是在没有异常之前,用于 RAII 类型的资源、进行错误处理的方法。

坏例子

void do_something(int n)
{
    if (n < 100) goto exit;
    // ...
    int* p = (int*) malloc(n);
    // ...
    if (some_error) goto_exit;
    // ...
exit:
    free(p);
}

你能找到错误吗?

其他方案

  • 使用异常和 RAII
  • 对于非 RAII 资源,用 finally