Предположим, у меня есть:
typedef boost::shared_ptr<Event> EventPtr;
В одном потоке я создаю Event
и отправляю его для отправки:
Event* event = new Event();
EventPtr eventPtr(event);
EventDispatcher::dispatch(eventPtr); //pseudocode
EventDispatcher
получает EventPtr и добавляет его в очередь, которая обрабатывается в другом потоке ... но какова подходящая сигнатура метода для метода отправки?
dispatch(EventPtr event); //will push_back(event)
или
dispatch(const EventPtr& event); //will push_back(event);
Учитывая, что мой EventDispatcher имеет очередь:
typedef std::queue<EventPtr> EventQueue
EventQueue theQueue;
Затем, другой поток извлекает Событие из очереди и передает его чему-то для обработки события:
EventPtr event = theQueue.front();
EventProcessor::process(event); //pseudocode
theQueue.pop();
Опять же, что является подходящей сигнатурой метода для process
метода? Мне интересно, могу ли я просто передать голый Event*
методу процесса?
Полагаю, мне интересно, должен ли я просто передавать по значению, чтобы счетчик ссылок был точным? Меня действительно беспокоит только тот факт, что один поток проталкивается в очередь, а другой поток выталкивает из очереди, и я не собираюсь где-то утекать указатели ...
Спасибо!