c++ - 循环内的局部对象的析构函数是否保证在下一次迭代之前被调用?
问题描述
当我有一个循环并在此循环内创建一个新的堆栈变量(不将其分配在堆上并在循环体内声明它的变量)时,该对象的析构函数是否保证在下一次迭代开始之前被调用,或者可能由编译器展开的循环会改变什么?
解决方案
来自n4800
:
§6.3.3块范围:
在块 (8.3) 中声明的名称是该块的本地名称;它具有块范围。它的潜在作用域从它的声明点(6.3.2)开始,到它的块的末尾结束。在块范围内声明的变量是局部变量。
§10.3.6析构函数:
当创建对象的块退出时,会隐式调用析构函数 [...] (8.7)
§4.1.1抽象机:
该规定有时被称为“好像”规则,因为只要从可观察到的行为可以确定,只要结果是好像已经遵守了该要求,实现就可以自由地忽略本文档的任何要求。程序。
[强调我的]
所以,是的。您的变量在循环结束时超出范围(这是一个块),因此只要观察程序行为的任何人都知道,它的析构函数就会被调用。
推荐阅读
- codeigniter - 如何在 cron 作业表单 cpanel - Codignitor 中使用 Seesion 变量?
- python - 为什么函数不能在标签 tkinter python 上显示图像,但它不能使用函数
- python - Python计算移动平均线
- react-native - 在外部单击时关闭模式
- mongodb - MongoDB聚合统计小时范围内的产品数量
- oracle - Oracle:查找带有打开游标的表
- php - 我想在 php 中显示一个小数点后 30 位的数字,而不用四舍五入为纳米货币,有人有什么想法吗?
- r - 用 R 查找 DNA 序列中的所有出现
- javascript - 如何使用正则表达式替换?
- ios - 如何将 PNG 图像转换为 base64 - React Native