基于C++11 可变参数构造对象池

概要:
  1. 最近写代码时发现需要一个对象池用于减少对象创建与销毁的开销。
  2. 理想中对象池接口应尽量精简,逻辑尽量精简,并可以支持不同的初始化构造方式。
  3. 阅读<<深入应用C++11 代码优化与工程级应用>>的对象池,其设计思路满足大部分需求,但示例代码略有瑕疵。
  4. 在书中的代码基础上进行扩展。
核心逻辑:

对象核心逻辑与大多数逻辑的优化思路是一致的,用空间换时间,通常来说,对象的创建有些部分是无法避免的,特别是在对系统进行内存申请的时候,所以,当幸苦创建的对象在我们不需要的时候返回给了系统,但是在紧接着的一小段时间内,我们又向系统申请一块内存用于创建一个新的对象,特别是当两个对象只不过是属性略微的区别,举例就比如游戏服务器中地图上的怪物被击杀在下一个刷新循环又被创建出来,这种场景下是会造成一定的浪费,所以对象池就是在对象进行销毁时,将即将销毁的对象进行暂存,再下次需要时,再从对象池中拿出,可以认为,两次对象的销毁预创建从系统层的内存申请反还优化成了应用层的赋值与指针移动,这一级别的优化还是很有必要的。

思路:
  1. 使用 shared_ptr 自定义析构,来进行对象销毁的自动维护,目的为在不需要使用对象后无需手动调用存入对象池的相关函数。
  2. 使用 函数模版中的 变参模版 template<class... Args>来满足可能存在不同的构造参数个数。
书中代码的问题:
  1. 书中将不同构造方式的对象进行了一个区分,但是不同构造方式进行构造的结果其实是相同的对象,个人薄见,代码应尽量保持精简,特别是相同的对象就不应该由于构造方式的不同而区分存放,即使是不同的构造方式,也应该交由同一个对象池进行管理,只有当不同的对象有这种需求。
  2. 书中代码有一个明显的问题,当对象通过智能指针的自定义进行析构的时候,并没有重新制定自定义析构函数,所以当再次被申请,又再次被释放时,对象将会被真正的销毁,不过这点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值