【发布时间】:2011-03-16 19:36:55
【问题描述】:
假设我有:
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;
然后,另一个线程从队列中弹出一个 Event 并将其交给某个东西来处理该事件:
EventPtr event = theQueue.front();
EventProcessor::process(event); //pseudocode
theQueue.pop();
同样,process 方法的适当方法签名是什么?我想知道我是否可以将裸Event* 传递给 process 方法?
我想我想知道我是否应该只按值传递以便引用计数准确?我真的只关心一个线程正在推入队列而另一个线程正在从队列中弹出并且我不会在某处泄漏指针的事实......
谢谢!
【问题讨论】:
标签: c++ boost smart-pointers