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

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

Восстановить пароль Регистрация
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
18.12.2012, 15:59     Деструктор не обязателен? #1
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;
}
В этом коде конструктор создан, а деструктор нет. Всё работает.

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

Так что получается, всё же деструктор не обязательно создавать? И без него всё работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 15:59     Деструктор не обязателен?
Посмотрите здесь:

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

сделал сейчас по-другому. Деструктор написал, а конструктор нет. ТОже всё работает. То есть выходит, если я создаю кого-то одного (констр. или деструктор) то компилятор при этом сам создаст другого? (неявно) Так что ли?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.12.2012, 16:26     Деструктор не обязателен? #6
Если не создавать ничего, то компилятор создаст оба. Но если создать конструктор с параметром/параметрами, то неявных конструкторов уже не будет, если при этом не будет явного контруктора оп умолчанию, то вообще не будет конструктора по умолчанию. Тогда нельзя будет декларировать экземпляры, не указывая конкретное значение параметра, который следует передать в конструктор. А вот деструктор всегда ровно один, или явный, или неявный. Неявное - это, что в программе есть, но чего в её тексте нет. То, что есть в программе, но чего ты сам в ней не писал и у других не заимствовал.
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()
вот интересно какая разница то)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 17:01     Деструктор не обязателен?
Еще ссылки по теме:

Деструктор C++
C++ Деструктор
Деструктор C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
18.12.2012, 17:01     Деструктор не обязателен? #8
Цитата Сообщение от Dean/W Посмотреть сообщение
а нас учили:
C++
1
int main()
По стандарту, а
Цитата Сообщение от Dean/W Посмотреть сообщение
C++
1
void main()
по прихоти всезнающего препода

Добавлено через 1 минуту
Цитата Сообщение от Dean/W Посмотреть сообщение
и соответственно нижняя часть вместо return
Если запускать из под консоли, то это лишнее
Yandex
Объявления
18.12.2012, 17:01     Деструктор не обязателен?
Ответ Создать тему
Опции темы

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