我正在研究函数如何通过按值返回来返回对象。所以,为了测试这个理论,我运行了一个简单的程序,它有一个返回 myclass 实例的函数——一个定制的类。
#include <iostream>
#include <cstdio>
using namespace std;
class myclass {
int i;
public:
void set_i(int n) { i=n; }
~myclass();
};
myclass f(int k); // return object of type myclass
int main()
{
f(20);
return 0;
}
myclass f(int k)
{
myclass x;
x.set_i(k);
return x;
}
myclass::~myclass() {
cout << "hello\n";
}
我通过在其中放置一个 cout "hello" 语句来重载析构函数,以便我能够跟踪函数内对象的本地副本以及在执行 return 语句期间创建的临时对象何时被销毁。
所以,我预计会调用 2 次析构函数;一个用于函数的对象本地副本,另一个用于临时对象。但相反,我只收到了一个!
请分享为什么我的程序没有两次输出“hello”。
谢谢。