shared_ptr - pass by value vs. pass by reference

Angenommen ich habe:

typedef boost::shared_ptr<Event> EventPtr;

In einem thread, erstelle ich eine Event und senden es ab zu erhalten ausgelöst:

Event* event = new Event();
EventPtr eventPtr(event);
EventDispatcher::dispatch(eventPtr);  //pseudocode

Den EventDispatcher erhält eine EventPtr und fügt es zu einer Warteschlange, verarbeitet in einem anderen thread...aber was ist eine geeignete Methode, Unterschrift für die dispatch-Methode?

dispatch(EventPtr event);  //will push_back(event)

oder

dispatch(const EventPtr& event);  //will push_back(event);

Wenn man bedenkt, dass meine EventDispatcher hat eine Warteschlange:

typedef std::queue<EventPtr> EventQueue
EventQueue theQueue;

Dann später den anderen thread, erscheint ein Ereignis aus der Warteschlange und übergibt es aus, um etwas zu verarbeiten, Veranstaltung:

EventPtr event = theQueue.front();
EventProcessor::process(event);  //pseudocode
theQueue.pop();

Wieder, was ist eine geeignete Methode, Unterschrift für die process Methode? Ich Frage mich, ob ich einfach die nackten Event* an die process-Methode?

Ich denke, ich Frage mich, soll ich nur als Wert übergeben, so wird die Referenz-Zählung ist korrekt? Ich bin eigentlich nur besorgt über die Tatsache, dass ein thread drängen in die queue und einem anderen thread knallen aus der Warteschlange und ich werde nicht Leck Zeiger irgendwo...

Dank!

InformationsquelleAutor Tim Reddy | 2011-03-16
Schreibe einen Kommentar