我最近读到,如果您将类的对象用作函数的接收参数,则必须自动创建对象的副本。因此,如果析构函数包含在类中,则原始对象及其副本都将自动消失。但是,当我尝试使用相同的构想析构函数编写小代码时,只激活了一次。是什么原因引起的?预先感谢!
#include "stdafx.h"
#include <iostream>
using namespace std;
class MyClass {
int val;
public:
MyClass(int i)
{
val = i;
cout << "Constructor is in progress" << endl;
}
void SetVal(int i)
{
val = i;
}
int GetVal()
{
return val;
}
~MyClass()
{
cout << "Destructer is in progress" << endl;
}
};
void Display(MyClass obj)
{
cout << obj.GetVal();
}
int main()
{
MyClass a(10);
cout << "Before display()" << endl;
Display(a);
cout << "After display()" << endl;
system("pause");
return 0;
}
答案 0 :(得分:0)
在return语句之后调用。您看到的第一条消息来自复制的对象。当您到达system("pause")
时,原始对象仍在作用域内,因此不会调用析构函数。在评估return语句之后调用它。