2014-01-04 4 views
-2

вот фрагмент:Почему этот кусок кода не работает, как я думаю?

Test & returnref(){ 
    Test *obj = new Test(); 
    cout << &obj << endl; 
    return *obj; 
} 

int main(){ 
    Test &object = returnref(); 
    cout << &object; 

    cin.get(); 
    return 0; 
} 

и этот код генерирует следующее:

0016FBC8 
004D4B98 

почему не так

0016FBC8 
0016FBC8 

?

Я думаю, что если я верну ссылку на динамически созданный объект (в куче), он должен быть точно таким же объектом, поэтому адреса должны быть равны.

Почему я не прав?

+1

Поскольку ваша функция печатает адрес переменной автоматического указателя; ваш 'main()' печатает выделенный в нем адрес (и несвязанный, также утечка памяти). – WhozCraig

ответ

7

Здесь:

cout << &obj << endl; 

вы печатаете адрес указателя. То, что вам действительно нужно, - это адрес остроконечного объекта, который равен &*obj или просто obj.

+0

ОК, я понял :). большое спасибо :) – 02446

+0

@ 02446 Также следите за комментарием WhozCraig - ваш код утечки памяти, вам нужно будет «delete & object;», когда вы закончите с ним. –

Смежные вопросы