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

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

Войти
Регистрация
Восстановить пароль
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

Не вызывается деструктор - C++

30.10.2012, 19:42. Просмотров 579. Ответов 8
Метки нет (Все метки)

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
#include <iostream>
using namespace std;
 
class myclass {
    int a;
public:
    myclass();  // конструктор
    ~myclass(); // деструктор
    void show();
};
 
myclass::myclass()
{
    cout << "In the constructor\n";
    a = 10;
}
 
myclass::~myclass()
{
    cout << "In the destructor\n";
}
 
void myclass::show()
{
    cout << a;
}
 
int main()
{
    myclass ob;
    ob.show();
    cout << endl;
    
    char response;        
    std::cin >> response; 
        
    return 0;
}
Мне казалось, что на экране при выполнении программы должно быть написано:

In the constructor
10
In the destructor


А на самом деле получается вот так:

In the constructor
10


То есть, я так понял, строчка 20 не выполняется. Программа наверное вообще не заходит в деструктор. Я не пойму почему. Я просто думал, что когда выполняется последний оператор (37 строчка), то программа завершается и должен включиться деструктор, чтобы удалить то что надо. В данном случае в этом деструкторе нет непосредственной команды чтобы он что-то стёр, зато есть команда вывести на монитор сообщение. А он не выводит. Почему так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 19:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не вызывается деструктор (C++):

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О - C++
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
30.10.2012, 19:44 #2
Он вызывается. Просто вы этого уже не видите
http://liveworkspace.org/code/a3e88b...ae5501a52c38f1
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 15:32  [ТС] #3
А почему в моём компиляторе последней строчки нет? (у меня Visual Studio 2010)
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
31.10.2012, 15:41 #4
Сделайте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    {
        myclass ob;
        ob.show();
        cout << endl;
        char response;        
        std::cin >> response;
    }
    system("pause");
    return 0;
}
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 17:03  [ТС] #5
Цитата Сообщение от yuron_477 Посмотреть сообщение
Сделайте так: ...
Ага, заработало. Спасибо. Теперь вижу надпись In the destructor
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
0
Игорь с++
436 / 459 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
31.10.2012, 17:43 #6
Цитата Сообщение от Alex Z Посмотреть сообщение
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
Потому что он описан уже в #include <iostream>
1
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 17:54 #7
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов?
std::system находится в cstdlib.
Потому что он описан уже в #include <iostream>
Он там не может быть описан.
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 18:03  [ТС] #8
Цитата Сообщение от soon Посмотреть сообщение
std::system находится в cstdlib
Так я же не подключаю никакого cstdlib!

Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 18:09 #9
Цитата Сообщение от Alex Z Посмотреть сообщение
Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
Да, но это не регламентируется стандартом.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 18:09
Привет! Вот еще темы с ответами:

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

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

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

Вызывается деструктор когда обьект не уничтожен! - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class inkr { private: int a; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.10.2012, 18:09
Ответ Создать тему
Опции темы

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