簡單物件池的製作

2021-10-05 03:13:53 字數 2068 閱讀 9219

關於物件池的介紹和講解網上有很多,這裡就不進行贅述。考慮到外掛程式以後可能會進行修改或擴充套件,所以我需要使用泛型,然後初步確定物件池需要有取出、**和清空三個功能。所以**如下:

public

class

objectpool

where t :

class

///

/// 從池子中獲取物件

///

///

public

tgetobject()

///

/// 將物件**進池子

///

///

public

void

recycleobject()

///

/// 清空池子

///

public

void

clearpool()

}

其中考慮到不同型別的物件可能例項化或者消失顯示的方式不同,所以建立了乙個poolitembase類作為池子的儲存物件,這個類也是泛型,裡面主要有例項化、隱藏、銷毀和顯示的方法,池子只需要呼叫物件的相應方法即可;此外在構造的時候需要有乙個prefeb引數作為模板,建立了乙個泛型的prefebobj變數進行儲存,以後池子建立出來的元素全部以此為模板(總感覺這個變數的存在不太好,但是想來想去想不到應該怎麼去掉,這裡先備註想到好辦法在進行修改)。

public

abstract

class

poolitembase

where t :

class

此基類的使用也很簡單,只需要在繼承的時候通過構建函式為prefebobj變數賦值,然後重寫裡面的方法就好了。放出測試的**讓大家看一下

public

class

gameobjectpoolitem

:poolitembase

public

override

void

destoryitem

(gameobject obj)

public

override

gameobject

installnewitem()

public

override

void

outpoolevent

(gameobject t)

public

override

void

unactiveitem

(gameobject obj)

}

至此,只需要在池子的函式中填充對應的邏輯就完成啦!完整**如下:在測試的時候發現池子每次在**的時候需要從管理的列表中拿出乙個元素,然後再需要手動將該元素從管理列表中刪除好麻煩,所以在**的方法中新增了乙個list變數,再通過ref關鍵字返回,這樣在**的時候只需要將物件列表傳進去池子就可以自動**並修改列表,操作簡單了許多。

public

class

objectpool

where t :

class

///

/// 從池子中獲取物件

///

///

public

tgetobject()

else

_itemprefeb.

outpoolevent

(t);

return t;

}///

/// 將物件**進池子

///

///

public

void

recycleobject

(ref list tlist)

}///

/// 清空池子

///

public

void

clearpool()

}}

測試一下,效果完美。

乙個簡單的物件池

在伺服器的的執行過程中,由於大量的計算會導致某些物件頻繁地分配和釋放,久而久之就會產生大量的記憶體碎片,從而影響伺服器的效率和穩定。本文通過實現乙個輕量級的物件池重用物件來解決這個問題。include include mutex.h define min increasize 30 每次最少分配30...

乙個簡單的物件池

從書上直接摘抄下來的物件池,以後別給忘了 template class objectpool template objectpool objectpool int chunksize throw std invalid argument,std bad alloc mchunksize chunks...

物件池的使用

1 乙個模板類的物件池,template class objpool objpool void bool init int nmaxcount 10 t newobj void 取得pos的物件 同時在obj中記錄在pool中的index pool unlock return pobj void d...