Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

Использование деструктора

26.06.2012, 13:21. Показов 1735. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не очень понимаю в каких случаях в классе или шаблоне надо реализовавывать дестрактор а в каких не не надо ???

вот например код :

вот нафига мне здесь дистрактор если я даже в мейне его не использую ??? еще интресно зачем мне здесь дефолтный конструктор

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
//Stack.inl
//
#include "ArrayException.h"
#include "StackException.h"
//using namespace std; 
template<class Type, int size>
Stack<Type,size>::Stack():m_array(new Array<Type>),m_current(0){} //the current position is the last index of the Array
// constructor
template<class Type, int size>
Stack<Type,size>::Stack(int size):m_array(new Array<Type>(size)),m_current(0){}        //the current position is the last index of the Array
//copy constructor
template<class Type, int size>
Stack<Type,size>::Stack(const Stack<Type,size>& copy):m_array(copy.m_array),m_current(m_array.Size()-1){} //the current position is the last index of the Array copied
//asignment operator
template<class Type, int size>
Stack<Type,size>& Stack<Type,size>::operator=(const Stack<Type,size>& s)
{
    if(this!=&s)        //handle self assignment
    {
        this->Stack<Type,size>::operator=(s);
        m_current = s.m_current;
    }
 
    return(*this);
}
//destructor
 
template<class Type, int size>
Stack<Type,size>::~Stack()
{
}
//member functions
 
template<class Type, int size>
void Stack<Type,size>::Push(const Type& element)
{
    try
    {
        if(m_current>=m_array->Size())  // as far as i'm understand from 
                                        // the condition of the problem this checker don't need to, 
                                        // because in array class already checked this condition 
                                        // but I can mistake because of this you should double check. 
        {
            throw OutOfBoundsException(m_current);
        }
        
        //increments the current position by 1 unit.
        
        m_array->SetElement(element,m_current);    //sets the element at the current position in the stack
        m_current++;
    }
    catch(OutOfBoundsException& error)
    {   
        //error.GetMessage();
        StackFullException();
    }
    catch(...)
    {
        std::cerr<<"Unhandled error occured"<<endl;
    }
}
 
 
 
template<class Type, int size>
Type Stack<Type,size>::Pop()
{
    
  try
    {
        if(m_current==0)
        {
            throw OutOfBoundsException(m_current);
        }
        
       m_current--;    //increments the current position by 1 unit.
       return m_array->GetElement(m_current);
    }
    catch(OutOfBoundsException error)
    {   
        StackEmptyException();
    }
    catch(...)
    {
        std::cerr<<"Unhandled error occured"<<endl;
    }
}
 
template<class Type, int size>
Array<Type>& Stack<Type,size>::ObjArray() 
{
return  *m_array;
}
 
template<class Type>
int Stack<Type,size>::Current() const
{
    return m_current;
}
 
//#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2012, 13:21
Ответы с готовыми решениями:

Абстрактный класс и использование деструктора
Есть абстрактный класс template &lt;class Vertex, class Edge&gt; class ABCG { protected: vector &lt;Vertex *&gt; *v; vector &lt;Edge *&gt;...

Использование деструктора в односвязном списке с++
Здравствуйте. Нужна срочная помощь!!! Есть реализация односвязного списка в котором узел - класс, а не структура. Вначале программы...

Объяснить использование виртуального деструктора
Ребят для чего здесь используется виртуальный деструктор? using namespace std; class Ostanovki { protected: char* name; ...

4
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
26.06.2012, 13:35
Цитата Сообщение от Leeto Посмотреть сообщение
Я не очень понимаю в каких случаях в классе или шаблоне надо реализовавывать дестрактор
Грубо говоря когда тело деструктора не пусто или нужен виртуальный деструктор, в противном случае компилятор сам его сгенерирует (с пустым телом).
Цитата Сообщение от Leeto Посмотреть сообщение
вот нафига мне здесь дистрактор если я даже в мейне его не использую
Используешь, если создаёшь объект. Деструктор вызывается автоматически. Насколько я помню, самому вызывать его имеет смысл только при использовании placement new.
C++
1
2
3
4
template<class Type, int size>
Stack<Type,size>::~Stack()
{
}
- такой деструктор можно не описывать, компилятор сгенерирует точно такой же.
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.06.2012, 17:32  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
Грубо говоря когда тело деструктора не пусто или нужен виртуальный деструктор, в противном случае компилятор сам его сгенерирует (с пустым телом).

Используешь, если создаёшь объект. Деструктор вызывается автоматически. Насколько я помню, самому вызывать его имеет смысл только при использовании placement new.

- такой деструктор можно не описывать, компилятор сгенерирует точно такой же.
спасибо ! я так и думал...
А есть какие то граничения связаные с новым стандартом с++ ???
т.е. это как return 0; в конце мейна вроде без нее все ок, а по стандарту должна быть эта строчка
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
26.06.2012, 17:40
Цитата Сообщение от Leeto Посмотреть сообщение
А есть какие то граничения связаные с новым стандартом с++ ???
Я стандарт не читал, но сомневаюсь, что там что-то кардинально изменилось в отношении деструкторов.
Цитата Сообщение от Leeto Посмотреть сообщение
т.е. это как return 0; в конце мейна вроде без нее все ок, а по стандарту должна быть эта строчка
"По стандарту" в С++ её как раз можно опустить.
1
26.06.2012, 17:54

Не по теме:

Цитата Сообщение от Leeto Посмотреть сообщение
вот нафига мне здесь дистрактор если я даже в мейне его не использую ??? еще интресно зачем мне здесь дефолтный конструктор
нет слов, RTFM
Литература C++

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2012, 17:54
Помогаю со студенческими работами здесь

Использование объекта после вызова деструктора
Здравствуйте. Вопрос, казалось бы, простой, но не могу найти точного ответа. class name { double* pD; public: name(); ...

Использование конструкторов и деструктора при проектировании пользовательского класса
Дан одномерный массив A. Найти max (a2, a4, …, a2k) + min (a1, a3, …, a2k+1).

Вызов деструктора
Есть написанный мною код: #include &lt;iostream&gt; class Foo { private: int *key; public: Foo (const int a=0) { key = new int...

Работа деструктора
Доброго дня, уважаемые программисты! Лаба. Есть класс Дата_и_Время, в классе часть полей должна быть динамическими. class...

Вызов деструктора
Вызывается ли деструктор объекта при завершении программы? а при аварийном завершении? А если снять процесс приложения диспетчером?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru