Есть вопрос по деструктору и конт. list
От: FatZorro  
Дата: 29.12.02 04:37
Оценка:
В классе есть такая конструкция:

list <list <string>* > Data;


Т.е. это список указателей на список, которые в свою очередь хранят строки (string).
Или в общих словах 2-х мерный массив с одной переменной размерностью.
Так вот вопрос: Правильно ли я уничтожаю эту констукцию в деструкторе?

Smart_Keeper::~Smart_Keeper()
{
    list <list <string>* >::iterator l = Data.begin();
    while (l != Data.end()) delete &l++;
}


PS Спасибо. Да и еще...код работает, ошибок и предупреждений нет, но у меня есть сомнения т.к. STL я только начал использовать.
Re: Есть вопрос по деструктору и конт. list
От: Андрей Тарасевич Беларусь  
Дата: 29.12.02 05:41
Оценка:
Здравствуйте, FatZorro, Вы писали:

FZ>В классе есть такая конструкция:


FZ>
FZ>list <list <string>* > Data;
FZ>


FZ>Т.е. это список указателей на список, которые в свою очередь хранят строки (string).

FZ>Или в общих словах 2-х мерный массив с одной переменной размерностью.
FZ>Так вот вопрос: Правильно ли я уничтожаю эту констукцию в деструкторе?

FZ>
FZ>Smart_Keeper::~Smart_Keeper()
FZ>{
FZ>    list <list <string>* >::iterator l = Data.begin();
FZ>    while (l != Data.end()) delete &l++;
FZ>}
FZ>


FZ>PS Спасибо. Да и еще...код работает, ошибок и предупреждений нет, но у меня есть сомнения т.к. STL я только начал использовать.


Сомневаюсь, что это может работать. Правильно

Smart_Keeper::~Smart_Keeper()
{
    list <list <string>* >::iterator l = Data.begin();
    while (l != Data.end()) delete *l++;
}
Best regards,
Андрей Тарасевич
Re[2]: Есть вопрос по деструктору и конт. list
От: Atilla Россия  
Дата: 29.12.02 07:52
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Сомневаюсь, что это может работать. Правильно


АТ>
АТ>Smart_Keeper::~Smart_Keeper()
АТ>{
АТ>    list <list <string>* >::iterator l = Data.begin();
АТ>    while (l != Data.end()) delete *l++;
АТ>}
АТ>


или так: (раз уж STL)

template<class T>
class scalar_delete
{
    void operator() (T* p) { delete p;}
};

Smart_Keeper::~Smart_Keeper()
{
    for_each(Data.begin(), Data.end(), scalar_delete< <list<string> >());
}
... << RSDN@Home 1.0 beta 4 >>
Кр-ть — с.т.
Re[3]: Есть вопрос по деструктору и конт. list
От: ioni Россия  
Дата: 29.12.02 12:12
Оценка:
Здравствуйте, Atilla, Вы писали:


A>или так: (раз уж STL)

а раз это c++

A>
A>template<class T>
A>class scalar_delete
A>{
A>    void operator() (T* p) { returndelete p;}
A>};

A>Smart_Keeper::~Smart_Keeper()
A>{
A>    for_each(Data.begin(), Data.end(), scalar_delete< <list<string> >());
A>}
A>
Re[2]: Есть вопрос по деструктору и конт. list
От: Аноним  
Дата: 29.12.02 12:15
Оценка:
Здравствуйте, Андрей Тарасевич
Я вот как-то писал такое:
void (*pdel)(void *) = &operator delete;

std::for_each(l.begin(), l.end(), pdel);
Re[4]: Есть вопрос по деструктору и конт. list
От: ioni Россия  
Дата: 29.12.02 12:15
Оценка: 6 (1)
Здравствуйте, ioni, Вы писали:

I>Здравствуйте, Atilla, Вы писали:


I>

A>>или так: (раз уж STL)
I>а раз это c++
прошу прощения за ситнаксис

A>>
A>>template<class T>
A>>struct scalar_delete 
A>>{
A>>    void operator() const (T* p) { return delete p;}
A>>};

A>>Smart_Keeper::~Smart_Keeper()
A>>{
A>>    for_each(Data.begin(), Data.end(), scalar_delete< <list<string> >());
A>>}
A>>
Re[5]: Есть вопрос по деструктору и конт. list
От: Anton V. Kolotaev  
Дата: 29.12.02 12:22
Оценка:
Здравствуйте, ioni, Вы писали:

A>>>
A>>>template<class T>
A>>>struct scalar_delete 
A>>>{
A>>>    void operator() const (T* p) { return delete p;}
A>>>};
A>>>


А какая в этом return сермяжная правда?
... << RSDN@Home 1.0 beta 3 >>
Re[3]: Есть вопрос по деструктору и конт. list
От: WolfHound  
Дата: 29.12.02 13:45
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Андрей Тарасевич

А>Я вот как-то писал такое:
А>
А>void (*pdel)(void *) = &operator delete;

А>std::for_each(l.begin(), l.end(), pdel);
А>

Чую зря ты так писл ибо если какой бес переопределит delete у класса на который указатель то...
... << RSDN@Home 1.0 beta 4 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Есть вопрос по деструктору и конт. list
От: MaximE Великобритания  
Дата: 29.12.02 17:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Андрей Тарасевич

А>Я вот как-то писал такое:
А>
А>void (*pdel)(void *) = &operator delete;

А>std::for_each(l.begin(), l.end(), pdel);
А>


Ключевое слово delete и operator delete совсем разные вещи. Здесь память будет освобождаться, но деструкторы вызываться не будут.
Re[5]: Есть вопрос по деструктору и конт. list
От: Mozhay Россия www.mozhay.chat.ru
Дата: 30.12.02 07:49
Оценка:
Здравствуйте, ioni, Вы писали:

template<class T>
struct scalar_delete 
{
    void operator() const (T* p) { return delete p;}
};


Вроде бы delete ничего не возвращает (C++ Standard, 5.3.5.1)
Re[2]: Есть вопрос по деструктору и конт. list
От: FatZorro  
Дата: 03.01.03 08:17
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Сомневаюсь, что это может работать. Правильно


АТ>
АТ>Smart_Keeper::~Smart_Keeper()
АТ>{
АТ>    list <list <string>* >::iterator l = Data.begin();
АТ>    while (l != Data.end()) delete *l++;
АТ>}
АТ>


Спасибо, пожалуй я сделаю именно так, а не буду мутить с перегрузкой...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.