为什么这段代码不像我想的那样工作

Why is this piece of code not working as I think?

本文关键字:工作 段代码 代码 为什么      更新时间:2023-10-16

这里有一个片段:

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

我认为,如果我返回对动态创建的对象(在堆上)的引用,它应该是完全相同的对象,因此地址应该相等。

为什么我错了?

在这里:

cout << &obj << endl;

您正在打印指针的地址。您真正想要的是指向对象的地址,即&*obj或简单地obj