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

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

Восстановить пароль Регистрация
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.06.2012, 13:21     Использование деструктора #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
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++ Абстрактный класс и использование деструктора
Вызов деструктора C++
C++ Вызов деструктора
Вызов деструктора C++
Отключение деструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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
 Аватар для 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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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     Использование деструктора
Ответ Создать тему
Опции темы

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