为什么不能访问在声明范围之外用 new 声明的变量?

H-0*_*005 1 c++ pointers scope heap-memory

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

{
    int * x = new int;
}
*x = 5; /// Error
Run Code Online (Sandbox Code Playgroud)

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

rpj*_*nst 5

x(指针)与其指向的事物(整数)之间存在差异。

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

int堆上并继续在堆上存在,但是当你扔掉x(指针),你有没有办法进入它和int已经泄漏。