这是我的看法:
当一个函数返回时,它会创建该对象的一个新的临时拷贝,并且这个临时对象会在调用它的语句的时间保留在内存中。
当函数返回引用时,对象本身也被返回。这意味着该对象不应该是本地的。
所以当我这样做时:
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 已经被创建,它就会以正确的方式被覆盖。所以我相信返回的是传递值的本地拷贝的引用。
但是一旦我在结构中创建析构函数,它就完美地运行了,具有以下代码和特定输出。
~MyStruct()
{
cout << name << " is destroying";
}
输出:
myname is destroying
myname
myname
myname is destroying
....
此输出显示每次调用只创建一个对象。 (有两个调用)
但为什么没有析构函数它就不能工作?
谢谢
最佳答案
MyStruct & ReferenceReturn(MyStruct cl)
{
return cl;
}
创建临时对象
,将其分配给cl
,返回对象的引用
,销毁对象。所以,它是悬挂引用
。编译器可以使用 copy-elision
并且不复制对象,但不能...使用一些东西 lile
MyStruct & ReferenceReturn(MyStruct& cl)
{
return cl;
}
关于c++ - 返回的返回类型是对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124412/