C++:指针和范围

oh *_*boy 5 c++ pointers

int* test( )
{
    int a = 5;
    int* b = &a;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

结果会test是一个bad pointer?据我所知,应该删除,然后b会成为乱搞指针,对吧?

如何更复杂的东西,不是一个int指针,但与20个成员左右的类相同?

Mar*_*off 7

你要归还的术语是" 悬空指针 ". a是一个在堆栈上分配的局部变量,一旦它超出范围就不再可用了(这与垃圾收集完全不同).尝试使用调用的结果test()将是未定义的行为.

另一方面,如果你没有a在堆栈上分配- (int *a = new int(5);),那就int *b = a; return b;好了,虽然不如return new int(5).但是,如果free以后没有正确地得到结果,则会发生内存泄漏.


小智 5

是的,它是指向不再存在的东西的指针,局部变量称为a.无论是一个int,一个数组,一个类的实例都没有区别.并且c ++没有垃圾收集.

在这种情况下,以及在许多其他情况下,您当然应该返回一份副本:

int test( )
{
    int a = 5;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

这对于类以及内置类型都是如此.