Можно создать дубликат:
Can a local variable's memory be accessed outside its scope?
return reference to local variableОбласть локального объекта
Это пример программы, написанные для проверки объема локального объекта класса внутри функции. Здесь я создаю объект класса A и присваиваю ему значения и возвращает этот объект по ссылке в 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: Возвращение указателя к выделенному стеку объекту является неопределенным Поведение (* Технически разыменование такого указателя происходит там, где происходит неопределенное поведение *) –