这就是我所相信的:
当一个函数返回时,它会为该对象创建一个新的临时副本,并且该临时对象在调用它的语句期间保留在内存中。
当函数返回引用时,该对象本身也会返回。这意味着该对象不应该是本地的。
所以当我这样做时:
MyStruct & ReferenceReturn(MyStruct cl)
{
return cl;
}
在 main() 我做
MyStruct d("notmyname"),g("myname");
d = ReferenceReturn(g);
cout << d.name;
cout << ReferenceReturn(g).name;
它在两者中都打印垃圾。
什么被退回?: 对 g 的本地副本的引用,即在函数完成后立即销毁的 cl 或对在语句结束后被销毁的临时对象的引用。但是因为如果 temp 被创建,它将以正确的方式覆盖 d。所以我相信它是返回的传递值的 localcopy 的引用。
但是,一旦我在结构中创建了析构函数,它就完美地运行了,并带有以下代码和特定的输出。
~MyStruct()
{
cout << name << " is destroying";
}
输出:
myname is destroying
myname
myname
myname is destroying
....
此输出显示每次调用仅创建一个对象。(有两个电话)
但是为什么没有析构函数它不能工作?
谢谢