自动存储持续性
自动存储持续性:
一个大括号内就是一个作用域
- 自动变量与栈: 自动变量存放在栈(Stack)中。当它的作用域结束(函数返回)时,系统仅仅是回收了内存的”使用权”(栈顶指针回撤),但不会清空里面的旧数据。此时,该内存处于”随时可被新内容覆盖”的无主状态。
- 覆盖元凶: 这片无主内存随时可能被接下来的 新函数调用 (如
cout)或操作系统的底层中断所占用并写入新数据。 - 致命的悬空引用(Dangling Reference): 如果我们将这个已经失效的自动变量绑定给了一个外部的”引用(
&)“并试图再次访问它,就相当于拿着钥匙去开一间已经属于别人的客房。我们极大概率会读到被其他操作覆盖后的乱码,引发严重的 未定义行为 。