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

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

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

Деструктор не обязателен? - C++

18.12.2012, 15:59. Просмотров 698. Ответов 7
Метки нет (Все метки)

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
#include <iostream>  
using namespace std;
 
class Cat                    
{
  public:                   
      Cat(int); // Конструктор           
      int  GetAge();        
      void SetAge(int);     
      void Meow();           
  private:                  
      int itsAge;            
};                          
 
// Конструктор класса Cat
Cat::Cat(int initialAge)
{
    itsAge = initialAge;
}
 
int Cat::GetAge() 
{
    return itsAge;
}
 
void Cat::SetAge (int age)  
{   
    itsAge = age;
}
 
void Cat::Meow()
{
    std::cout << "Meow.\n";
}
 
int main()
{   
    Cat Frisky(3);
    Frisky.Meow();
    std::cout << "Frisky is a cat who is ";
    std::cout << Frisky.GetAge() << " years old.\n";    
    
    char response;        
    std::cin >> response; 
 
    return 0;
}
В этом коде конструктор создан, а деструктор нет. Всё работает.

В оной книге написано, что если я создаю конструктор, то обязательно надо создать и деструктор. Посмотрел в другую книжку (в Шилдта) а там приведён пример кода, где тоже один конструтор без деструктора.

Так что получается, всё же деструктор не обязательно создавать? И без него всё работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Деструктор не обязателен? (C++):

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B - C++
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

Деструктор - C++
здравствуйте. подскажите пожалуйста ... почему деструктор некорректно работает ? не хочет уничтожает объекты динамического массива (...

Деструктор - C++
Добрый вечер!мне нужна одна программа для примера(рабочая),но это тему мы коснулись слегка..хотел попросить у кого есть...

Деструктор - C++
Не понимаю почему в проге не работает строка cout &lt;&lt; &quot;Удаляем элемент списка!&quot;; вроде деструктор вызываеться автоматически, как пишет...

Деструктор - C++
Вроде все просто но чето никак не работает Задача: Написать программу в которой Конструктор класса MyCl выводит сообщение на...

Деструктор - C++
В чем проблема?)

7
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
18.12.2012, 16:05 #2
Если в классе что-то динамическое создаешь то тогда деструктор точно нужен.
А здесь даже не знаю. Наверно не нужен. Удалять нечего)
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
18.12.2012, 16:09  [ТС] #3
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
Если в классе что-то динамическое создаешь то тогда деструктор точно нужен.
А здесь даже не знаю. Наверно не нужен. Удалять нечего)
где-то в Интернете я вроде читал, что если не создашь конструктор, то компилятор сам его создаст. а к деструктору это относится? может в этом примере он создастся компилятором?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.12.2012, 16:16 #4
Цитата Сообщение от Alex Z Посмотреть сообщение
В этом коде конструктор создан, а деструктор нет. Всё работает.
Деструктор тоже создан, потому и работает. Просто он неявный и как любой неявный деструктор просто пустой. Явный в данном случае не обязателен.
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
18.12.2012, 16:21  [ТС] #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Деструктор тоже создан, потому и работает. Просто он неявный и как любой неявный деструктор просто пустой. Явный в данном случае не обязателен.
Неявный это в смысле созданный компилятором?

сделал сейчас по-другому. Деструктор написал, а конструктор нет. ТОже всё работает. То есть выходит, если я создаю кого-то одного (констр. или деструктор) то компилятор при этом сам создаст другого? (неявно) Так что ли?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.12.2012, 16:26 #6
Если не создавать ничего, то компилятор создаст оба. Но если создать конструктор с параметром/параметрами, то неявных конструкторов уже не будет, если при этом не будет явного контруктора оп умолчанию, то вообще не будет конструктора по умолчанию. Тогда нельзя будет декларировать экземпляры, не указывая конкретное значение параметра, который следует передать в конструктор. А вот деструктор всегда ровно один, или явный, или неявный. Неявное - это, что в программе есть, но чего в её тексте нет. То, что есть в программе, но чего ты сам в ней не писал и у других не заимствовал.
1
Dean/W
1 / 1 / 0
Регистрация: 16.05.2010
Сообщений: 64
18.12.2012, 16:57 #7
Деструктор вроде не всегда создаётся, лучше объявить на всякий случай, а если будет что то динамическое удалить ну delete this->
а нас учили:
не
C++
1
int main()
а
C++
1
void main()
и соответственно нижняя часть вместо return
C++
1
2
3
4
5
_getch()
//или
cin.get();
//но тогда надо если есть cin>> 
cin.ignore()
вот интересно какая разница то)
1
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
18.12.2012, 17:01 #8
Цитата Сообщение от Dean/W Посмотреть сообщение
а нас учили:
C++
1
int main()
По стандарту, а
Цитата Сообщение от Dean/W Посмотреть сообщение
C++
1
void main()
по прихоти всезнающего препода

Добавлено через 1 минуту
Цитата Сообщение от Dean/W Посмотреть сообщение
и соответственно нижняя часть вместо return
Если запускать из под консоли, то это лишнее
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 17:01
Привет! Вот еще темы с ответами:

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

деструктор - C++
Для освобождения памяти динамически выделенных массивам надо использовать delete. требуется ли освобождать память выделенную под простой...

Деструктор - C++
Доброго времени суток, есть некоторый класс и 2 функции подобны тем, что описаны ниже. В первой объявляется данный класс, обрабатывается и...

Деструктор - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #define _CRTDBG_MAP_ALLOC #include &lt;crtdbg.h&gt; using namespace std; class list{ ...


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

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

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