使用模板和STL實現物件池

2021-06-16 05:22:46 字數 1751 閱讀 2124

在頻繁申請和釋放類的例項時,有兩點值得考慮:速度問題對空間會變得七零八落。 這時候使用物件池是乙個不錯的注意,這會有效緩解上面兩個現象。物件池的主要思想就是:事先申請一些記憶體單元由應用程式自身管理,知道整個程式結束。本人實現的乙個模板類如下:

//judedeng 2011.1.18

#ifndef __objectpool_h__

#define __objectpool_h__

#include

using namespace std;

#define default_size 10

//申請物件

#define new_obj(obj_manager, class_name, arglist) (sizeof(class_name)==obj_manager.getsizeoftype()? (new(obj_manager.mallocobject()) class_name arglist) : null)

//釋放物件

#define del_obj(obj_manager, obj_pointer) (obj_manager.freeobject(obj_pointer) ? (obj_pointer=null, true) : false)

template

class cobjectmgr_t

protected:

listm_activeobjectlist, m_idleobjectlist;

};#include "objectpoolimp.h"

#endif

#ifndef __objectpoolimp_h__

#define __objectpoolimp_h__

#include "objectpool.h"

template

cobjectmgr_t::cobjectmgr_t(int sizeofobjectlist)

else

if(pobject)

return null;

}template

bool cobjectmgr_t::freeobject(t * pobject)

}return false;

}template

cobjectmgr_t::~cobjectmgr_t()

for(ite=m_idleobjectlist.begin(); ite!=m_idleobjectlist.end(); ++ite)

printf("/nfor debug:: activeobjectlist = %d ,, idleobjectlist = %d/n", c1, c2);

m_activeobjectlist.clear();

m_idleobjectlist.clear();

}template

int cobjectmgr_t::reclaimidelmem(double rate)

return 0;

}#endif

#include

#include

#include "objectpool.h"

class ca

ca(int x=2)

ca(ca& obj, double a1, void *a2)

virtual ~ca()

void dosth(...)

class cb

void dosth(...)

};void main()

system("pause");

}

C 11 使用可變引數模板類實現物件池

物件池模板類 pragma once include cobjinstance.h include include include 實現模板型別物件池,使其可以適配任何類型別且是執行緒安全的!template class t class cobjpool cobjpool 再釋放node的記憶體 d...

山寨STL實現之記憶體池

記憶體池的作用 減少記憶體碎片,提高效能。首先不得不提的是win32和x64中對於指標的長度是不同的,在win32中乙個指標佔4位元組,而在x64中乙個指標佔8位元組。也正是不清楚這一點,當我在x64中將指標作為4位元組修改造成其他資料異常。首先我們先來定義三個巨集 define align siz...

C 物件池實現

在實際中,我們會遇到乙個類最多隻允許若干個物件同時存在的情形。如果這個類的物件會被頻繁的建立,使用並銷毀,那這時會對系統效能造成影響,而這時可以考慮使用物件池的方法來避免每次使用物件都需要從 構造 使用 銷毀 這個流程,物件池中的每個物件都一次構造多次使用,而析構也只會在物件池析構是才會發生。要實現...