C ++ Telltales第7部分:
这是我的C ++ Telltales系列的第七部分,我在其中分享了一些使用C ++的技巧。 请随时在 这里查看 该系列的其他部分 !
如果需要使用大量寿命很短的对象,尤其是初始化或销毁这些对象的成本很高时,则对象池很有用。 它们用于提供对可重用对象的访问,这些可重用对象是在请求时动态创建的或在对象池初始化时创建的-使用哪种方法取决于您计划使用对象池的方式。
对象池在某些情况下可以大大提高性能,并且经常用于例如图形粒子系统,存储大的位图和字体以及用于套接字连接。 这是利用C ++ 14的对象池的示例实现。 它允许使用一定数量的对象初始化池,设置池中的最大对象数量,还可以利用C ++参数包为新创建的对象传递构造参数。 因此,让我们看一下:
它很可能不是完美的解决方案,但提供了有关如何执行对象池的想法。 该示例使用std :: unique_ptr自定义删除程序,在调用上下文完成使用该对象后,将该对象返回到池中。 它要求使用重置功能将对象重置为原始状态,以便在再次使用同一对象实例时,将设置所有成员变量,就像设置一个全新实例一样。
另请注意,该示例根本不是线程安全的,因此无法从多个线程调用该示例。 您只需将互斥量添加到要修改堆栈的位置即可轻松实现线程安全。 您可能希望使对象池成为单例或Mapleton,以便轻松地从多个上下文访问它。
随意使用此片段作为您自己的对象池实现的基础,乐于助人!
如果您喜欢这个故事,请按下面的❤按钮(您知道可以鼓掌不止一次)。 也请随时分享这个故事!
关于我
我是Heikki Hellgren,是Elektrobit Automotive的软件专家和技术爱好者。 我的兴趣是软件构建,工具,自动测试以及AI和自动驾驶等所有新奇事物。 您可以在Medium和Twitter上关注我,并查看我的网站以获取更多信息。
From: https://hackernoon.com/the-object-pool-pattern-e424507b996a