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

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

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

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

18.12.2012, 15:59. Просмотров 646. Ответов 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;
}
В этом коде конструктор создан, а деструктор нет. Всё работает.

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

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

Не работает деструктор C++ - C++
Работаю в среде DEVc++ #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Employee { ...

Не работает деструктор - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; #pragma hdrstop #pragma argsused class vect { public: vect(int...

конструктор и деструктор - C++
Почему деструктор не вызывается? #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; class myclass{ float a; ...

Зацикливается деструктор - C++
Здравствуйте :) Очень прошу ограничиться ответом на мой вопрос, если Вы его знаете, и приберечь на другой раз советы использовать готовые...

Нужен ли деструктор? - C++
Вопрос туп, но что-то переклинило, извиняйте. Делаю в Qt. class A { QList&lt;int&gt;* list public: A() { list = new...

Не работает деструктор - C++
Выписал пример из самоучителя, но выяснилось что не работает деструктор. В чем проблема? #include &lt;iostream&gt; using namespace std; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ушёл с форума.
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
Ушёл с форума.
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++
Здравствуйте. Есть класс Node. class Node { public: Node(); ~Node(); /* Методы */

Не вызывается деструктор - C++
#include &lt;iostream&gt; using namespace std; class myclass { int a; public: myclass(); // конструктор ~myclass(); //...

Деструктор и указатель - C++
Допустим, имеем класс с переменной-указателем: class A { public: A(){} ~A(); private: ...

виртуальный деструктор - C++
есть такой пример, у меня вопрос, почему здесь деструктор декларирован просто как деструктор, а не виртуальный (и является ли он в данном...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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     Деструктор не обязателен?
Ответ Создать тему
Опции темы

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