порядок удаления объектов класса
От: Аноним  
Дата: 17.09.13 08:36
Оценка:
всем привет, помогите пожалуйста!
у меня есть класс myclass. его экземпляры динамически создаются и удаляются в процессе работы программы.
доступ к экземлярам осуществляется через указатели, которые хранятся в векторе.
vector <myclass *> vec1;
vec1.push_back(new myclass());

в ходе работы любой объект из vec1 может быть удален. А нужно ли строго соблюдать порядок удаления ?? т.е. vec1[0] будет удален позже чем vec1[1];
Re: порядок удаления объектов класса
От: SaZ  
Дата: 17.09.13 08:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в ходе работы любой объект из vec1 может быть удален. А нужно ли строго соблюдать порядок удаления ?? т.е. vec1[0] будет удален позже чем vec1[1];


Зависит исключительно от того, что вы делаете.
Re: порядок удаления объектов класса
От: rg45 СССР  
Дата: 17.09.13 09:08
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>всем привет, помогите пожалуйста!

А>у меня есть класс myclass. его экземпляры динамически создаются и удаляются в процессе работы программы.
А>доступ к экземлярам осуществляется через указатели, которые хранятся в векторе.
А>vector <myclass *> vec1;
А>vec1.push_back(new myclass());

А>в ходе работы любой объект из vec1 может быть удален. А нужно ли строго соблюдать порядок удаления ?? т.е. vec1[0] будет удален позже чем vec1[1];


Почему бы не использовать вместо голых указателей умные? Это могло бы избавить как от вопросов о порядке удаления, так и от забот о самом удалении.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: порядок удаления объектов класса
От: Кодт Россия  
Дата: 17.09.13 10:46
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>Почему бы не использовать вместо голых указателей умные? Это могло бы избавить как от вопросов о порядке удаления, так и от забот о самом удалении.


Ну, не скажи.
Хотя топикстартера эти вопросы ЕЩЁ не занимают, но проблемы с недетерминированным порядком удаления управляемых объектов очень даже реальны.
Это хорошо, если логические связи между объектами представлены умными указателями между ними. Тогда, в худшем случае, мы просто поймаем кольцевую зависимость, и придумаем способ её разорвать.
Примеры неочевидных логических связей: сервис, зарегистрированный и доступный по имени; окно или виджет — обработчик сообщения, сигнала, события; поток-производитель или потребитель данных из очереди.
А также разнообразные синглетоны...
Перекуём баги на фичи!
Re[3]: порядок удаления объектов класса
От: rg45 СССР  
Дата: 17.09.13 10:59
Оценка:
Здравствуйте, Кодт, Вы писали:

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


R>>Почему бы не использовать вместо голых указателей умные? Это могло бы избавить как от вопросов о порядке удаления, так и от забот о самом удалении.


К>Ну, не скажи.

К>Хотя топикстартера эти вопросы ЕЩЁ не занимают, но проблемы с недетерминированным порядком удаления управляемых объектов очень даже реальны.
К>Это хорошо, если логические связи между объектами представлены умными указателями между ними. Тогда, в худшем случае, мы просто поймаем кольцевую зависимость, и придумаем способ её разорвать.
К>Примеры неочевидных логических связей: сервис, зарегистрированный и доступный по имени; окно или виджет — обработчик сообщения, сигнала, события; поток-производитель или потребитель данных из очереди.
К>А также разнообразные синглетоны...

Да-да, я все это понимаю, потому и употребил осторожную формулировку "могло бы..." (в каких-то не очень сложных случаях).
--
Не можешь достичь желаемого — пожелай достигнутого.
Re: порядок удаления объектов класса
От: ArtDenis Россия  
Дата: 18.09.13 02:42
Оценка: 3 (1) +1
Здравствуйте, Аноним, Вы писали:

А>в ходе работы любой объект из vec1 может быть удален. А нужно ли строго соблюдать порядок удаления ?? т.е. vec1[0] будет удален позже чем vec1[1];


Я думаю, что книжка по С++, прочитанная, а не просто пролистанная, сразу ответит на 99% подобных вопросов. Подойдёт любой самоучитель, хотя я лично рекомендую книжку от автора языка — Бьерна Страуструпа: "Язык программирования С++".
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.