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

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

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

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

30.10.2012, 19:42. Просмотров 549. Ответов 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 строчка), то программа завершается и должен включиться деструктор, чтобы удалить то что надо. В данном случае в этом деструкторе нет непосредственной команды чтобы он что-то стёр, зато есть команда вывести на монитор сообщение. А он не выводит. Почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
30.10.2012, 19:44     Не вызывается деструктор #2
Он вызывается. Просто вы этого уже не видите
http://liveworkspace.org/code/a3e88b...ae5501a52c38f1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 15:32  [ТС]     Не вызывается деструктор #3
А почему в моём компиляторе последней строчки нет? (у меня Visual Studio 2010)
DiffEreD
1427 / 764 / 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;
}
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 17:03  [ТС]     Не вызывается деструктор #5
Цитата Сообщение от yuron_477 Посмотреть сообщение
Сделайте так: ...
Ага, заработало. Спасибо. Теперь вижу надпись In the destructor
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
31.10.2012, 17:43     Не вызывается деструктор #6
Цитата Сообщение от Alex Z Посмотреть сообщение
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
Потому что он описан уже в #include <iostream>
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 17:54     Не вызывается деструктор #7
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов?
std::system находится в cstdlib.
Потому что он описан уже в #include <iostream>
Он там не может быть описан.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 18:03  [ТС]     Не вызывается деструктор #8
Цитата Сообщение от soon Посмотреть сообщение
std::system находится в cstdlib
Так я же не подключаю никакого cstdlib!

Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 18:09     Не вызывается деструктор
Еще ссылки по теме:

C++ Вызывается ли деструктор в данной программе?
C++ Почему не вызывается деструктор?
Не вызывается деструктор структуры C++
C++ Почему вызывается деструктор?
Почему деструктор вызывается два раза C++

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

Или воспользуйтесь поиском по форуму:
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 18:09     Не вызывается деструктор #9
Цитата Сообщение от Alex Z Посмотреть сообщение
Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
Да, но это не регламентируется стандартом.
Yandex
Объявления
31.10.2012, 18:09     Не вызывается деструктор
Ответ Создать тему
Опции темы

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