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

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

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

26.06.2012, 13:21. Просмотров 670. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 13:21     Использование деструктора
Посмотрите здесь:

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

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

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

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

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

Вызов деструктора - C++
Доброго вам времени суток. Проблема в том, что деструктор не выводит сообщение без этой строки. s1.~Shave(); И я не уверен, что так...

Вызов деструктора - C++
При ручном вызове деструктора, освобождается ли память*

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

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

Ошибка деструктора - C++
Имеется шаблон класса- динамического массива. После создания функции push_back начал ругаться конструктор. Объясните пожалуйста в чем дело?...

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

Описание деструктора - C++
Пример: #include&lt;iostream&gt; using namespace std; class A { int A; };


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

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

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

- такой деструктор можно не описывать, компилятор сгенерирует точно такой же.
спасибо ! я так и думал...
А есть какие то граничения связаные с новым стандартом с++ ???
т.е. это как return 0; в конце мейна вроде без нее все ок, а по стандарту должна быть эта строчка
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
26.06.2012, 17:40     Использование деструктора #4
Цитата Сообщение от Leeto Посмотреть сообщение
А есть какие то граничения связаные с новым стандартом с++ ???
Я стандарт не читал, но сомневаюсь, что там что-то кардинально изменилось в отношении деструкторов.
Цитата Сообщение от Leeto Посмотреть сообщение
т.е. это как return 0; в конце мейна вроде без нее все ок, а по стандарту должна быть эта строчка
"По стандарту" в С++ её как раз можно опустить.
Jupiter
26.06.2012, 17:54     Использование деструктора
  #5

Не по теме:

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

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

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