即使你表明你没有C ++ 11,也不需要很多代码来实现你自己的与C ++ 03兼容的std :: shared_ptr。如果您的应用程序不是多线程的,您甚至不必担心以线程安全的方式更新对象的引用计数。
我不使用Boost,所以我不能权威地说,但Boost可能已经有了可以使用的与std :: shared_ptr兼容的C ++ 03实现。
内存分配器的大多数现代实现实际上非常有效,并且在堆上实例化新的消息对象并不像您想象的那么大。
所以,你的整体方法是:
您收到消息,并实例化相应的子类 Message 在堆上。
Message
run()方法还应该接收消息本身的引用计数句柄,并将其传递给处理程序。
如果处理程序不需要保存消息的副本,它什么也不做,并且很快就会被销毁,否则它会抓取引用句柄,并将其存放在某个地方。