Уничтожитель неприятностей - PullRequest
0 голосов
/ 14 октября 2018

Недавно я читал, что если вы используете объект класса в качестве параметра получения функции, копия объекта должна создаваться автоматически.Поэтому, если деструктор включен в класс, и оригинальный объект, и его копия будут автоматически исчезать.Однако, когда я попытался сделать небольшой код с той же концепцией, деструктор активировался только один раз.Что может вызвать проблему?Заранее спасибо!

#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 голосов
/ 14 октября 2018

Вызывается после оператора return.Первое сообщение, которое вы видите, от скопированного объекта.Когда вы доберетесь до system("pause"), ваш исходный объект все еще находится в области видимости, поэтому деструктор не вызывается.Он вызывается после вычисления оператора возврата.

Деструктор вызывается в конце main ();странное поведение

...