Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Хочу научится

15.08.09 00:48
Re: Хочу научится
 
anly завсегдатай
anly
в ответ Murr 14.08.09 18:18
В ответ на:
всё таки в С++ удобней
-----
Да ну? Ну давай, раскажи как можно, имея только простой указатель на объект,
определить, можно ли вызывать его деструктор...
При этом не надо никакого дополнительного кода
-----
Какой избыточный код требуется в C#? Даже delete не нужен... выйдет из области
существования и будет удален, когда это возможно.

пардон, я С# уже давно не трогал, потому даже ключевых слов не помню. Я помню что есть некая возможность определить область при выходе из которой будет вызвана какаято стандартная функция объекта, типа так:
Try
{
Объект а = new Объект
....
}
catch
{
// вот здесь эта функция и будет вызвана
}
Что то вроде, только конечно не try и catch, но я не помню какие ключслова. Вот описание этих блоков типа try и catch - и есть дополнительный труд.
В С++ десктуктор вызовется как только delete вызовешь. Но это мелочь, не слишком важно для меня. Меня больше волнуют объекты созданные в стеке без new.
в с++ их деструктор вызовется при выходе из области видимости.
{
A a;
...
...
// здесь будет вызван a.~a(), т.е. деструктор объекта a, даже если в "..." произошло исключение.
}
Такая фишка нужна не только для освобождения рессурсов (памяти, файлов и т.п.). Смысл - сделать чтото при выходе из области видимости. Вот простенькие классы чтобы не забыть записать переменную или булевкий флажок:
template< class T > class CSetRestore
{
T* m_p;
T m_v;
public:
CSetRestore( T* p, T v ){ m_p = p, m_v = *m_p, *m_p = v; }
~CSetRestore(){ *m_p = m_v; }
};
template< class T, T on, T off > class COnOff
{
T* m_p;
public:
COnOff( T* p ){ m_p = p, *m_p = on; }
~COnOff(){ *m_p = off; }
};
typedef COnOff<bool, true, false> COnOff_bool;
typedef COnOff<bool, false, true> COffOn_bool;
Проклят нарушающий межи ближнего своего (Втор.27:17)
 

Перейти на