Класс, который знает все свои экземпляры (комментарии)
Это сообщение сгенерировано автоматически.
И не только свои, но и всех своих наследников...
Честно сказать, до такого додуматься не проблема...
Извините пожалуйста, можно нескромный вопрос, нах оно надо?
мои любимые миксины
template< class T > class ClassWhoKnowsAllHisInstances { static std::list< T* > classList; public: ClassWhoKnowsAllHisInstances() { classList.push_back((T *)this); }; ~ClassWhoKnowsAllHisInstances() { std::list< T* >::iterator it; it=(std::find(classList.begin(), classList.end(), ( T* ) this)); if(it!=classList.end()) classList.erase(it); }; }; class MyClassWithListOfAllInstances : public ClassWhoKnowsAllHisInstances< MyClassWithListOfAllInstances> { }; class OtherClassWhoKnowsAllItInstances : public ClassWhoKnowsAllHisInstances< OtherClassWhoKnowsAllItInstances > { };
Жесть какая... Да еще и с ошибкой.
if(it!=classList.end()) (*it)=0;
Это не удаляет ноду из списка, поэтому посоздавав экземпляров можно загадить всю память списком длиной в 100 миллионов нод. Линейный поиск по списку в 100 миллионов нод тоже не подарок.
не совсем понятно зачем объекту надо знать свои экземпляры, я могу понять менеджеру создавшему обекты, но сомещать и менеджер обектов и сам обект немного странно.
my.name
> не совсем понятно зачем объекту надо знать свои экземпляры
класс знает свои экземпляры, вместо менеджера методы класса ( хотя и не очень кузяво )
например, сделать broadcast для всех экземпляров
Wraith
> Да еще и с ошибкой.
Кстати да, спасибо.
Что-то вчера я совсем уже никакой это дело одобрял...
Исправил.
Wraith
> Линейный поиск по списку в 100 миллионов нод тоже не подарок.
Ок, добавил в подсказку замечание.
MarkoPolo
> Честно сказать, до такого додуматься не проблема...
Подсказка для новичков же.
>Если экземпляров предвидится много, то вместо std::list лучше использовать какой-нибудь ассоциативный контейнер для ускорения поиска.
ИМХО тут больше всего подходит std::set
Kloun
> ИМХО тут больше всего подходит std::set
отцы сказали - юзать std::set низяяя ни в коем случае, он плохо на карму действует :)
innuendo
> отцы сказали - юзать std::set низяяя ни в коем случае, он плохо на карму
> действует :)
серьезно? а я тыкаю где не поподя ;( теперь гореть мне в аду???
помойму это из области К.О. не?
я бы понял еще еслиб сдесь какиенить умные указатели разберали
Тема в архиве.