c++ - 为什么不能在声明的范围之外访问用 new 声明的变量?
问题描述
我知道这是一个愚蠢的问题,我无法理解我是如何陷入困境的,但我在这里。在这段代码中,当我尝试在它声明的范围之外访问x时(在堆上声明),它告诉我x 没有在这个范围内声明。
{
int * x = new int;
}
*x = 5; /// Error
我以前从来没有遇到过这个问题。在我打电话之前x不应该存在delete x;
吗?
解决方案
x
(指针)和它指向的东西(int)之间是有区别的。
int 不是“在堆上声明的”——堆不是范围,也不包含声明。x
另一方面,它只是堆栈上的一个普通变量,在其包含块的执行完成时消失。
堆上的int
确实继续存在于堆上,但是当您扔掉x
(指针)时,您无法访问它并且int
已经泄漏。
推荐阅读
- asp.net-core - 如何在 asp.net 核心中间件中添加自定义加密/解密?
- python - 用 python 互连 DMM 和 DAQ PMX
- git - git 防御者不适用于 VS 代码源代码控制
- javascript - 模拟 redis 监听器
- javascript - 使用 js 用户脚本重新定位弹出窗口
- ios - UIImageView 状态 isHighlighted 在情节提要中设置为 true 但在加载视图时设置为 false
- .net - 在使用 select-xml 应用 XPath 表达式后,是否有可靠的方法来获取所选元素的名称
- matlab - 为什么这段代码无法处理不同的矩阵?
- javascript - 我可以使用 DropzoneJs 在拖动事件中获取文件名以及文件是否是有效类型(给定 mime)?
- google-sheets - 在 Google 表格中使用包含过滤器的 ARRAYFORMULA