c ++变量范围

bob*_*bob 1 c++

我很难记住在c ++中,只要指针指向它,就会破坏块中定义的局部(非静态和块内)变量,即使在执行离开块之后也是如此.所以,如果我在一个块中创建一个int,并且有一个全局指针,并且我离开了块,那么我的指针仍能找到那个int吗?

我没有在网上找到一个明确的答案,虽然它可能不止一次被回答,抱歉.

Luc*_*ore 5

不,您处于未定义的行为领域.

我假设你的意思是这样的:

int* p = NULL;
{
   int x = 0;
   p = &x;
}
//p is a dangling pointer
Run Code Online (Sandbox Code Playgroud)

如果试图取消引用p},你会遇到麻烦(或更糟的是,你不会和它看起来像它的工作).

但是你可以重新分配指针,就像这样

p = new int();
Run Code Online (Sandbox Code Playgroud)

完全没问题.

以下是合法的(作为使用new或分配动态内存的替代方法malloc):

int* p = NULL;
{
   static int x = 0;
   p = &x;
}
*p = 0;
Run Code Online (Sandbox Code Playgroud)

  • @bob:在C++中,你通常想要使用`new`而不是`malloc`.特别是,`malloc`只分配内存,但`new`在该内存中构造一个对象.对于简单(内置)类型,这并不重要,但对于更复杂的类型,它可能变得至关重要.虽然`new`返回一个原始指针,但在大多数情况下你会想把它存储在一个智能指针中 - 其中有许多种类(例如,`shared_ptr`,`unique_ptr`). (2认同)