可能重复:
Can a local variable's memory be accessed outside its scope?
return reference to local variable范围本地对象的
这对于检查在函数内部局部类对象的范围写入的示例程序。这里我创建了A类的一个对象并为其赋值并在Function()
中通过引用返回该对象。我想知道当变量的作用域结束时。因为它是一个堆栈对象(不是指针),它是否会在Function()的末尾被破坏?如果是这样,将其参考值分配给新对象时会发生什么?
#include "stdafx.h"
#include <iostream>
class A
{
public:
int a, b;
A(int aa, int bb)
{
a = aa;
b = bb;
}
A(){}
};
A& Function()
{
A object;
object.a = 10;
object.b = 20;
return object;
}
int _tmain(int argc, _TCHAR* argv[])
{
A aaa = Function();
std::cout<<"\nValue : "<<aaa.a<<" "<<aaa.b;
getchar();
return 0;
}
如果我将堆栈对象更改为指针,则会发生相同的行为。对?? –
@AjeshPN:如果你从函数*按值返回一个动态分配的指针*,那么接受返回指针的指针将指向动态内存,它将正常工作。 –
@AjeshPN:返回指向堆栈分配对象的指针是未定义的行为(*从技术上讲,取消引用这样的指针是发生未定义行为的地方*) –