析构函数故障

时间:2018-10-14 19:43:38

标签: class oop destructor

我最近读到,如果您将类的对象用作函数的接收参数,则必须自动创建对象的副本。因此,如果析构函数包含在类中,则原始对象及其副本都将自动消失。但是,当我尝试使用相同的构想析构函数编写小代码时,只激活了一次。是什么原因引起的?预先感谢!

#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;
}

1 个答案:

答案 0 :(得分:0)

在return语句之后调用。您看到的第一条消息来自复制的对象。当您到达system("pause")时,原始对象仍在作用域内,因此不会调用析构函数。在评估return语句之后调用它。

Is destructor called at the end of main(); strange behavior