Управление распространением события: указатель или экземпляр? - PullRequest
2 голосов
/ 19 апреля 2011

Я кодирую систему обработки событий (следуя шаблону наблюдателя ...), и я хотел бы знать, какой из них является лучшим способом распространения или распространения класса Event, примерно так:

class Event{
public:
    Event(int code);
    virtual ~Event();
    int getCode() const;

private:
    int code;
};

Подробно, если лучше отправить его через указатель (выделенная куча) или как экземпляр (выделенный стек).

Event e(1);
notifyAll(e);

vs

Event * e = new Event(1);
notifyAll(e)

Я знаю, что это действительно распространенный вопрос, и я знаю предложенные рекомендации для общих случаев, но я хотел бы знать, в каком конкретном случае обработки событий заботятся о производительности, оптимизации, поточной безопасности и т. Д.

Моя идея состоит в том, чтобы отправлять через выделение стека, видя, что класс - это просто POD, и избегать проблем управления жизнью (или использования умных указателей).С другой стороны, дерево распространения событий может быть очень большим в моих приложениях, поэтому я боюсь, что это может быть проблемой.

Спасибо.(Например, если вам известна какая-либо хорошая реализация, не такая сложная, как в qt, для изучения, пожалуйста, запишите ее)

1 Ответ

1 голос
/ 19 апреля 2011

Если вы передаете объект, выделенный из стека, по ссылке, то между производительностью и передачей по указателю разницы в производительности нет.

Если вы передаете по указателю, то часть кода нести ответственность за delete -ing-объект.OTOH, если время жизни объекта должно сохраняться за пределами области, в которой он создан, то вы вынуждены выполнять динамическое распределение.В этом случае, возможно, вам может понадобиться подсчет ссылок.Трудно сказать без дополнительной информации.

...