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

024*_*446 -2 c++ reference visual-studio-2010

这是一个片段:

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

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

    cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且此代码生成以下内容:

0016FBC8
004D4B98
Run Code Online (Sandbox Code Playgroud)

为什么不呢

0016FBC8
0016FBC8
Run Code Online (Sandbox Code Playgroud)

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

为什么我错了?

小智 7

这里:

cout << &obj << endl;
Run Code Online (Sandbox Code Playgroud)

您正在打印指针的地址.你真正想要的是尖头物体的地址,这是&*obj或简单的obj.