информационная безопасность
без паники и всерьез
 подробно о проекте
Где водятся OGRыПортрет посетителяСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Вредоносные плагины в маркетплейсе... 
 Модульный ботнет от русских хакеров 
 Торвальдс и вайбтестеры 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] проблемы с STL 26.07.01 12:23  Число просмотров: 874
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка>
> class A
> {
> public:
> A(){ a = new char[100];}
> ~A(){ delete a;}
> };
>
> void main()
> {
> std::list<A*> l;
> A* a = new A();
> l.push_back(a);
> l.clear();
> }
>
> Почему не вызывается деструктор объекта а при очистке
> списка?

А почему он должен вызываться ?
Откуда ему знать ЧТО ты желаешь сделать с этими указателями ?
В данном случае clear() уничтожает УКАЗАТЕЛИ на объекты а не сами объекты...

> Если хранить в списке не указатели, а объекты, то все
> нормально.
> Но нужны именно указатели.

унаследовать свой класс списка от std::list<...>
и перегрузить std::list<...>.clear()
в котором организовать уничтожение твоих объектов через указатели


PS: ты же всегда можешь посмотреть как то или иное действие определено в STL ...
вот и смотри...
<programming>
[Win32] проблемы с STL 26.07.01 11:48  
Автор: waka Статус: Незарегистрированный пользователь
<"чистая" ссылка>
class A
{
public:
A(){ a = new char[100];}
~A(){ delete a;}
};

void main()
{
std::list<A*> l;
A* a = new A();
l.push_back(a);
l.clear();
}

Почему не вызывается деструктор объекта а при очистке списка?
Если хранить в списке не указатели, а объекты, то все нормально.
Но нужны именно указатели.
[Win32] проблемы с STL 26.07.01 12:23  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка>
> class A
> {
> public:
> A(){ a = new char[100];}
> ~A(){ delete a;}
> };
>
> void main()
> {
> std::list<A*> l;
> A* a = new A();
> l.push_back(a);
> l.clear();
> }
>
> Почему не вызывается деструктор объекта а при очистке
> списка?

А почему он должен вызываться ?
Откуда ему знать ЧТО ты желаешь сделать с этими указателями ?
В данном случае clear() уничтожает УКАЗАТЕЛИ на объекты а не сами объекты...

> Если хранить в списке не указатели, а объекты, то все
> нормально.
> Но нужны именно указатели.

унаследовать свой класс списка от std::list<...>
и перегрузить std::list<...>.clear()
в котором организовать уничтожение твоих объектов через указатели


PS: ты же всегда можешь посмотреть как то или иное действие определено в STL ...
вот и смотри...
[Win32] проблемы с STL 26.07.01 13:59  
Автор: waka Статус: Незарегистрированный пользователь
<"чистая" ссылка>
спасибо за ответ. Мне все это конечно известно.

Я придумал несколько другой способ.

template<class T>
class allocatorMy : public std::allocator<T>
{
public :
// Перегружаем destroy
void destroy(pointer _P)
{
_Destroy(*_P); // перед удалением указателя удаляем сам объект
_Destroy(_P);
}
};

А список надо использовать так:
class A{ .... }

void main()
{
std::list<A*, allocatorMy<A*>> l;
A* a = new A();
l.push_back(a);
}

А мне интересно, разве в стандартной библиотеке нет такого встроенного механизма.
[Win32] проблемы с STL 26.07.01 14:54  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка>
> спасибо за ответ. Мне все это конечно известно.
>
> Я придумал несколько другой способ.
>

По идее перезгузка destroy() это примерно то же самое.

>
> А мне интересно, разве в стандартной библиотеке нет такого
> встроенного механизма.

Нет и быть не должно ... указатель это только указатель,
убив его в одном списке ты можешь иметь его в 33 других
и мало ли где еще ...
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach