首页 > 解决方案 > 为什么不能在声明的范围之外访问用 new 声明的变量?

问题描述

我知道这是一个愚蠢的问题,我无法理解我是如何陷入困境的,但我在这里。在这段代码中,当我尝试在它声明的范围之外访问x时(在堆上声明),它告诉我x 没有在这个范围内声明

{
    int * x = new int;
}
*x = 5; /// Error

我以前从来没有遇到过这个问题。在我打电话之前x不应该存在delete x;吗?

标签: c++pointersscopeheap-memory

解决方案


x(指针)和它指向的东西(int)之间是有区别的。

int 不是“在堆上声明的”——堆不是范围,也不包含声明。x另一方面,它只是堆栈上的一个普通变量,在其包含块的执行完成时消失。

堆上的int确实继续存在于堆上,但是当您扔掉x(指针)时,您无法访问它并且int已经泄漏。


推荐阅读