Модератор
2885 / 1743 / 178
Регистрация: 19.02.2011
Сообщений: 6,421
1

Особенности работы деструктора

09.05.2014, 11:38. Показов 535. Ответов 3
Метки нет (Все метки)

Есть вот такой код. Все работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <iomanip>
using namespace std;
 
class complex{
    private:
    double re,im;
    friend complex operator+(complex a, complex b){
        return complex(a.re+b.re,a.im+b.im);
    }
    public:
    complex(double r, double i){
        re=r;
        im=i;
    }
    complex(double r){
        re=r;
        im=0;
    }
    complex(){
        re=0;
        im=0;
    }
    ~complex(){
        cout<<"complex removed "<<re<<" "<<im<<endl;
    }
    void show(){
    cout<<re<<" "<<im<<endl;
}
};
 
 
int main(){
    double a,b,c,d;
    
    cin>>a;
    cin>>b;
    cin>>c;
    cin>>d;
    complex aa=complex(a,b);
    complex bb=complex(c,d);
    aa.show();
    bb.show();
    complex cc=aa+bb;
    cc.show();
    
    return 0;
}
Но я не могу понять одну вещь: к моменту окончания работы программы десьркктор вызываеься 5 раз (2 раза для введенных пар значений и 1 раз для суммы). Почему 5 раз, а не 3?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2014, 11:38
Ответы с готовыми решениями:

Ошибка работы деструктора
Здравствуйте. Недавно начала программировать на C++, поэтому возможно жителям данного форума мой...

Программа падает во время работы деструктора
/ ConsoleApplication6.cpp: определяет точку входа для консольного приложения. // #include...

Особенности работы fread
Решаю типовую задачу: считывание заголовка bmp-файла (точечного рисунка). Однако у меня ничего не...

Особенности и порядок работы с указателями, обмен данными между динамическими массивами
Написать программу обмена данными между двумя динамическими массивами,как можно проще. Заранее...

3
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
09.05.2014, 12:01 2
Цитата Сообщение от TanaTiX Посмотреть сообщение
complex aa=complex(a,b);
Тут два объекта, один из которых временный. Строчкой ниже - аналогично.
0
Модератор
2885 / 1743 / 178
Регистрация: 19.02.2011
Сообщений: 6,421
09.05.2014, 12:06  [ТС] 3
Т.е. когда я передаю объект в качестве аргумента, то создается их копия, а не передается ссылка на них? Реально ведь создается только 3 объекта.
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
09.05.2014, 12:11 4
delete
Добавлено через 2 минуты
Все, вру я. RVO никто не отменял.
Просто смотрю не туда.
Цитата Сообщение от TanaTiX Посмотреть сообщение
operator+(complex a, complex b)
Тут-то по значению аргументы принимаются.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2014, 12:11
Помогаю со студенческими работами здесь

Работа деструктора
Доброго дня, уважаемые программисты! Лаба. Есть класс Дата_и_Время, в классе часть полей должна...

Вызов деструктора
При ручном вызове деструктора, освобождается ли память*

Вызов деструктора
Есть написанный мною код: #include &lt;iostream&gt; class Foo { private: int *key; public: Foo...

Ошибка деструктора
Имеется шаблон класса- динамического массива. После создания функции push_back начал ругаться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru