问题描述
我读了一些关于 C++ 的书,但我无法理解这里的一些要点。 临时对象是由于函数返回而产生的,这个临时对象将存储在某个对象中。 ,所以我在下面尝试了很多时间代码
这样的结果
New: 00CFFB60
copy: 00CFFA60
T: 00CFFA60
copy: 00CFFB54
Destroy: 00CFFA60
temp: 00CFFB54
Destroy: 00CFFB54
Destroy: 00CFFB60
在这里,我理解打印“copy object: 0115FE80”是因为 testfuction 正在返回 T, 所以在我看来,临时对象会出现并用 T 调用复制构造函数,所以临时对象的地址是 00CFFB54(来自 copy: 00CFFB54)。在这段代码中
我刚刚将这个临时对象输入到 temp
我认为这里曾经发生过复制省略,对吗?
无论如何,在把这个临时对象放到 temp 之后,这个 temp 和 testfunction 的临时对象有相同的地址,结果 temp: 00CFFB54 所以它和之前的 copy: 00CFFB54 完全一样
我无法理解这两个对象如何具有相同的地址。在我看来,这两个不是同一个对象,所以从来没有相同的地址,我尝试了很多次,但总是这两个地址相同。 这里发生了什么?
解决方法
CopyObject
打印出副本的目的地的地址,而不是来源。为 temp = testfunction(a);
显示的地址(根据从 temp
返回的值构造 testfunction
)将为 temp
。
您可以在复制构造函数中显示这两个地址以查看区别。