首页 > 后端开发 > C++ > 在 C 中 `goto` 是否跳过析构函数调用?

在 C 中 `goto` 是否跳过析构函数调用?

Barbara Streisand
发布: 2024-11-26 12:24:08
原创
431 人浏览过

Does `goto` Skip Destructor Calls in C  ?

goto 跳转可以跨代码而不调用析构函数吗?

问题: goto 跳转真的可以绕过代码吗不执行的部分析构函数?

示例:考虑以下代码:

void f() {
   int x = 0;
   goto lol;
}

int main() {
   f();
lol:
   return 0;
}
登录后复制

goto 跳转后对象 x 会被删除吗?

答案:

不,物体x 不会被泄露。

这种信念是一种常见的误解。 goto 跳转不会规避 C 的作用域机制,并且析构函数会按预期调用。

1.标签范围:

Goto 语句不能跨越函数边界。标签的范围仅限于定义它的函数。

2.对象初始化:

Goto 跳转无法绕过对象初始化。尝试跳过未初始化的对象将导致编译器错误。同样,跳回已初始化的对象将导致其先前的实例被销毁。

3.对象的范围:

当 goto 跳转退出其范围时,具有自动存储持续时间的对象不会泄漏。 C 确保对象在退出作用域时按照其构造的相反顺序被销毁。

结论:

Goto 跳转完全尊重 C 的作用域和销毁规则。不可能使用 goto 来规避这些机制并导致内存泄漏。不过,仍然不建议过度使用 goto,因为它会导致代码难以理解和维护。

以上是在 C 中 `goto` 是否跳过析构函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板