【发布时间】:2012-08-20 21:41:49
【问题描述】:
这就是我所相信的:
当函数返回时,它会创建对象的新临时副本,并且此临时对象在调用它的语句期间保留在内存中。
当函数返回引用时,该对象本身也会返回。这意味着该对象不应该是本地的。
所以当我这样做时:
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
....
此输出显示每次调用只创建一个对象。 (有两个调用)
但是为什么没有析构函数就不能工作呢?
谢谢
【问题讨论】:
-
此类情况的结果是否未定义?
标签: c++ oop object reference destructor