Я пытаюсь разработать простую систему событий, которая «в основном» выглядит следующим образом:
HandleEvent(..)
с различными перегрузками для определения типа времени компиляции вместо использования dynamic_casting
,Что было бы лучше выбрать при генерации событий: создавать их в стеке и передавать их по ссылке, или динамически размещать их в куче и использовать dynamic_casting и позволить наблюдателю освободить их, когда они обрабатываются объектами, которые могут их обрабатывать ? (Например, нет ли необходимости в динамическом размещении, когда событие может быть запущено довольно часто; как насчет динамического приведения, разве его нельзя избежать?).
Кроме того, это не совсем потокобезопасный сценарий ..
Вам нужно динамическое распределение? Нет. Как правило, вы хотите
void fireEvent()
{
Event ev;
for ( each observer )
observer.trigger(ev);
}
И подпись наблюдателя
void trigger(const Event& ev);
Обратите внимание, что «передача ссылок на них» не соответствует действительности, педантично говоря. Это на самом деле «передача их по ссылке».
Других решений пока нет …