Класс, который знает все свои экземпляры (комментарии)
Это сообщение сгенерировано автоматически.
И не только свои, но и всех своих наследников...
Честно сказать, до такого додуматься не проблема...
Извините пожалуйста, можно нескромный вопрос, нах оно надо?
мои любимые миксины
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 низяяя ни в коем случае, он плохо на карму
> действует :)
серьезно? а я тыкаю где не поподя ;( теперь гореть мне в аду???
помойму это из области К.О. не?
я бы понял еще еслиб сдесь какиенить умные указатели разберали
Тема в архиве.