У меня следующий код
class Test
{
public:
int &ref;
int a;
Test(int &x)
:ref(x)
{
cout<<"Address of reference "<<&ref<<endl;
cout<<"&a : "<<&a<<endl;
cout<<"this = "<<this<<endl;
}
};
int main()
{
Test *pObj = NULL;
{
int i = 10;
cout<<"Address of referent "<<&i<<endl;
pObj = new Test(i);
}
pObj->ref++;
cout<<pObj->ref;
}
Вывод:
Address of referent 002DFB3C
Address of reference 002DFB3C
&a : 00734C94
this = 00734C90
Как видите, тестовый объект создается динамически. переменная i, которая хранится в стеке, отправляется в качестве параметра конструктору класса Test. Я напечатал адрес переменных i, ref и a.
Вопрос: переменная i будет уничтожена, когда управление программой выйдет из блока, в котором она объявлена. Но переменная-член динамически размещаемого объекта ref все равно будет ссылаться на адрес стека (Address of i). Можно использовать ref после смерти я.
Почему объект кучи имеет ссылку на память стека? Почему это разрешено?