【发布时间】:2020-07-31 16:40:01
【问题描述】:
我知道这是一个愚蠢的问题,我无法理解我是如何陷入困境的,但我在这里。 在这段代码中,当我尝试在它声明的范围之外访问 x (在堆上声明)时,它告诉我 x 没有在这个范围内声明 。
{
int * x = new int;
}
*x = 5; /// Error
我以前从未遇到过这个问题。在我致电delete x; 之前,x 不应该存在吗?
【问题讨论】:
-
我从来没有遇到过这个问题你用的是什么C++?...
-
我在 C++11 和 C++17 中尝试过。我很确定这只是我忘记的东西
-
这里有多个概念,到目前为止,没有一个答案能正确解决。范围确定在源代码中标识符(名称)的可见位置。一个单独的概念,生命周期,是在程序执行期间可以使用对象的时间。对于某些对象,特别是那些具有自动存储持续时间的对象,生命周期与范围相关(当其关联块的执行结束时,生命周期将不复存在)。但这并不意味着您不能访问其范围之外的对象。您可以通过在接收到它的指针的子例程中访问它。
标签: c++ pointers scope heap-memory