【文件属性】:
文件名称:高速对象池(内存池)类模板代码(C++)
文件大小:7KB
文件格式:CPP
更新时间:2022-05-11 17:20:19
内存池 对象池 高速 placem 类模板
包含定义代码和测试代码,代码不复杂,有注释,池对象存取时间复杂度为常数级,多线程测试速度可达千万次/秒。
使用方法如下:
1.定义池,例如:
FastPool pool;
2.往池添加对象,例如:
pool.Add("abc");//要注意这里传入的是构造对象的参数
3.取出一个对象以使用,例如:
std::string* p = pool.Pop();
这一步可以跟上一步结合起来:
std::string* p = pool.AddAndPop("123");//这时候p就指向"123"这个刚加入池的std::string对象
4.存回对象以重用,例如:
pool.Release(p);
5.还有的时候需要删除池中的对象,例如:
pool.Delete(p);//只删除一个对象
pool.DeleteNotUsed();//删除池中未使用的对象
pool.DeleteAll();//删除池中所有对象
上面的示例只是模板参数为std::string 时的用法。还有一些函数未列出。希望代码能给大家带来启发。
重新检查了一次,发现模板代码中区分类和基本数据类型的代码用到了另外自定义的库。需要做如下修改:
#include
//先定义一个模板用以区分类和基本数据类型的行为
templatestruct ChangeClass {typedef typename TT Type;};
templatestruct ChangeClass {typedef typename std::vector Type;};
然后代码中的
typedef typename LK::Templates::UseT::value, std::vector, T>::type TP;
if (LK::Templates::IsClassOrUnion::value)
改为:
typedef typename ChangeClass::value>::Type TP;//防止非类调用析构函数导致的错误
if (std::is_class::value)
最后,欢迎喜欢编程的伙伴来qq群244953928探讨O(∩_∩)O