Supongamos que tengo:shared_ptr - paso por valor vs pase por referencia
typedef boost::shared_ptr<Event> EventPtr;
Por un hilo, estoy creando una Event
y enviarlo a conseguir enviado:
Event* event = new Event();
EventPtr eventPtr(event);
EventDispatcher::dispatch(eventPtr); //pseudocode
El EventDispatcher
recibe un EventPtr y lo agrega a una cola que se procesa en otro hilo ... pero ¿cuál es una firma de método apropiada para el método de envío?
dispatch(EventPtr event); //will push_back(event)
o
dispatch(const EventPtr& event); //will push_back(event);
Teniendo en cuenta que mi EventDispatcher tiene una cola:
typedef std::queue<EventPtr> EventQueue
EventQueue theQueue;
Luego, más tarde, el otro hilo aparece un evento de la cola y se lo entrega fuera a algo para procesar el evento:
EventPtr event = theQueue.front();
EventProcessor::process(event); //pseudocode
theQueue.pop();
De nuevo, ¿cuál es una firma de método apropiada para el método process
? Me pregunto si puedo pasar el Event*
desnudo al método de proceso.
Supongo que me pregunto ¿se supone que debo pasar el valor por lo que el recuento de referencias es preciso? Solo estoy preocupado por el hecho de que un hilo se está metiendo en la cola y otro hilo está saliendo de la cola y no voy a filtrar punteros en algún lugar ...
¡Gracias!