C++ 简单对象池实现
一、前言
C++智能指针,这次该是大家经常听说的对象池了;
什么是对象池
所谓对象池就是有很多对象的池子,其实也就是开始创建大量的对象放在一个池子里面;这不免让我想起了后宫佳丽三千人呀!我们可以将后宫比作一个池子,这三千佳丽就是三千个对象,这三千佳丽住在后宫,也就是在对象池中有三千个对象;
对象池的作用
我们还用着后宫佳丽三千人来做比较;
第一种情况:皇帝需要一个妃子就让侍卫和大臣去纳妃,这一次就可能要好久,这些侍卫和大臣不免要面临砍头抄家的风险呀!关键每次皇帝每次纳妃之后,就把妃子逐出了皇宫,这样每次纳妃再逐出去,皇帝心累,侍卫和大臣每次也是在墙角瑟瑟发抖呀!
**第二种情况:**这种情况就好很多了,侍卫和大臣一次性就为皇帝纳了3000人并且入住后宫,皇帝需要妃子的时候,从后宫抓一个出来,不需要在放进去,这样,侍卫和大臣没有了砍头的风险,皇帝也很愉快,效率变高了好多;
通过上面两种说法,我们会发现,采用对象池的方式,会使对象在申请和释放时更加的高效和方便;
二、对象池实现思路
采用链表的方式:
获取对象
为了防止冲突,每次我们获取对象的时候,我们会从链表的头进行获取,然后将头删除
回收对象
与获取对象相同,回收对象时,将对象加入到对象池的尾部,这样就不会和获取对象有所冲突;
这次是做的简单的对象池,其实有很多缺陷:
对象池中没有对象时,应该另外申请对象,释放对象的时候,应该区分直接释放和回收内存池,可参考C++内存池设计与实现;
三、对象池实现测试代码
#ifndef _OBJECTPOOL_HPP_
#include <iostream>
template<class Object>
Object* GetObject()
void ReturnObject(Object* pObj)
private: #endif // !_OBJECTPOOL_HPP_
对象池测试代码
#include "ObjectPool.hpp" using namespace std;
class Test
int main()
return 0; |
全部评论
最新文章
-
1大模型数量国内第一!百度智能云国内首家支持Llama3全系列训练推理
-
2华为云推动土耳其数据库技术创新,“土耳其数据库先锋计划”正式启动
-
3鹅厂造了一座「桥」!腾讯云让主机搬家~
-
41299 万元,中兴新云中标财务共享建设项目
-
5新版本新能力,华为云 OceanBase 为何要打造实时分析数据库
-
61473.8万元,浪潮云中标重庆职业技能公共实训中心智联驾驶技术实训项目
-
7基于阿里云通义千问!央视《新闻联播》点赞中国一汽大模型应用!
-
8腾讯云4月8日故障复盘及情况说明
-
9天翼云大模型首次接入天文望远镜!基于通义千问,“星语3.0”发布
-
10IDC发布2023年中国整体超融合市场报告,深信服第一
热点排行
-
1文件存储 NAS 和 对象存储 OSS 的区别
-
2天翼云云电脑 | 让电视一秒变身电脑
-
3阿里工程师太凶残了,竟把服务器泡在“水里”!
-
4腾讯云 | 想在微信群里发起9人以上的语音聊天怎么办?
-
5数据仓库终结者:Dremio
-
62020年云服务器哪家强:阿里云、腾讯云、华为云、UCloud测评报告
-
72020 年 Q1 中国云市场份额:阿里云第一、华为云跃居第二、腾讯云下降为第三
-
8阿里云 web 应用防火墙(WAF)价格:179元/年
-
92020 Q1 中国公有云市场份额 TOP3:阿里云、腾讯云、华为云
-
10郑大一附院系统瘫痪 2 小时,运维人员被判 5 年半:破坏计算机信息系统罪
有话要说