Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Damn364
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 32
#1

Деструктор не вызывается - C++

16.11.2012, 22:03. Просмотров 511. Ответов 1
Метки нет (Все метки)

В одном классе я создаю объект, и если проверку не проходит, я его возвращаю в другой метод, дабы у меня там начало всех начал,Главное Меню

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void InputData(){
  while(true){
...
Bank B(tmpId);
  if(!B.CheckId())  return InputData();
  if(!B.CheckAttempt()) return InputData();
GetPassword();
  if(B.CheckPin(tmpPin)){
    cout<<"Все верно"<<endl;
    return SelectOperation();
  }
  else {
    cout<<"Неверно"<<endl;
    return InputData();
    }
  }
}
Но когда я делаю return, у меня деструктор автоматически не вызывается, и получается данные не сохраняются

вот конструктор и деструктор

C++
1
2
3
4
5
6
7
8
public:
    Bank(){ }
    Bank(int id){
        bankData(id);
    }
    ~Bank(){
        save();
    }
Объясните пожалуйста, почему он не вызывается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2012, 22:03     Деструктор не вызывается
Посмотрите здесь:

Не вызывается деструктор - C++
#include &lt;iostream&gt; using namespace std; class myclass { int a; public: myclass(); // конструктор ~myclass(); //...

Не вызывается деструктор - C++
_Здравствуйте. Я новичок в программировании, сейчас изучаю самостоятельно С++ по книге Джесса Либерти. При разборе одного из примеров...

Почему вызывается деструктор? - C++
Доброго времени суток. Написал такой код: struct O { virtual ~O() { cout &lt;&lt; &quot;hey&quot;; } }; struct...

Почему не вызывается деструктор? - C++
Всем доброго времени суток! Подскажите пожалуйста - почему не вызывается деструктор при выполнении строки 48? #include&lt;iostream&gt;...

Не вызывается деструктор структуры - C++
Создал класс. Членом класса является указатели на структуру, которая определена в классе. Поля структуры указатели, т.к. работа будет с...

Когда вызывается деструктор класса? - C++
Вопрос собственно в том, когда происходит освобождение памяти, занимаемой объектом класса? Допустим имеем #include &lt;iostream&gt; struct...

Два раза вызывается деструктор - C++
Создал класс, в процессе выполнения программы вызвал деструктор, но когда программа завершается, деструктор вызывается повторно и вылетает...

Вызывается ли деструктор в данной программе? - C++
вызывается ли деструктор в данной программе и почему он не выводит на экран,что он выведен...?#include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Почему деструктор вызывается два раза - C++
Всем привет. Есть код, для примера #include &lt;vector&gt; using namespace std; struct AA { int n; AA() :n(0) { cout &lt;&lt;...

Не вызывается деструктор при работе с классом - C++
Здравствуйте! Не подскажете почему при работе с классом Деструктор не вызывается???? Вот код: #define _CRTDBG_MAP_ALLOC ...

Почему виртуальный деструктор вызывается дважды? - C++
Непонятно: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include&lt;string&gt; using namespace std; class base { ...

Деструктор вызывается до то возвращения значения из функции - C++
hi hi::operator+(const hi&amp; in) { struc * cur = last; struc *curs = in.last; hi out(&quot;0&quot;); int ost = 0, i = cur-&gt;a + curs-&gt;a...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
16.11.2012, 22:15     Деструктор не вызывается #2
Он вызовется, когда отработают все ретурны. Когда вы делаете
C++
1
2
3
4
void InputData() {
    Foo bar;
    return InputData();
}
То вот у вас первая активация функции InputData(). Отрабатывает конструктор bar. Потом происходит вторая активация функции InputData() в процессе вычисления выражения с return. Там для этой второй активации опять конструктор bar и т. д. Но деструктор не вызывается, пока не закончится вычисление выражения с return, потому что ещё функция не закончила работу и bar не вышла из области видимости этой функции. Деструкторы вызовутся на обратном ходу рекурсии, когда будут пробрасываться значения обратно (ну, так как у вас void, то просто когда стек будет сворачиваться, когда рекурсия прервётся).
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru