Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
1

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

30.10.2012, 19:42. Просмотров 1083. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2012, 19:42
Ответы с готовыми решениями:

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

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

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

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

8
570 / 553 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
30.10.2012, 19:44 2
Он вызывается. Просто вы этого уже не видите
http://liveworkspace.org/code/... 01a52c38f1
1
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 15:32  [ТС] 3
А почему в моём компиляторе последней строчки нет? (у меня Visual Studio 2010)
0
1451 / 788 / 257
Регистрация: 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
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 17:03  [ТС] 5
Цитата Сообщение от yuron_477 Посмотреть сообщение
Сделайте так: ...
Ага, заработало. Спасибо. Теперь вижу надпись In the destructor
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
0
479 / 471 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
31.10.2012, 17:43 6
Цитата Сообщение от Alex Z Посмотреть сообщение
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов? (обычно, вроде приходится)
Потому что он описан уже в #include <iostream>
1
2551 / 1316 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 17:54 7
А почему для использования этой функции system("pause"); не нужно подключать каких-нибудь дополнительных заголовочных файлов?
std::system находится в cstdlib.
Потому что он описан уже в #include <iostream>
Он там не может быть описан.
1
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
31.10.2012, 18:03  [ТС] 8
Цитата Сообщение от soon Посмотреть сообщение
std::system находится в cstdlib
Так я же не подключаю никакого cstdlib!

Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
0
2551 / 1316 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.10.2012, 18:09 9
Цитата Сообщение от Alex Z Посмотреть сообщение
Или system находится в cstlib, а cstlib находится в iostream ? Так что ли?
Да, но это не регламентируется стандартом.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2012, 18:09

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

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

Почему не вызывается деструктор?
Всем доброго времени суток! Подскажите пожалуйста - почему не вызывается деструктор при...

Вызывается ли деструктор в данной программе?
вызывается ли деструктор в данной программе и почему он не выводит на экран,что он...

Объясните почему вызывается деструктор
Вот код char* ConjunctionLots(ArrayLot firstLot, ArrayLot secondLot, ArrayLot thirdLot) {...


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

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

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