1. 程式人生 > >C++實現簡單的物件池

C++實現簡單的物件池

物件池的實現其實是非常簡單的

思想也是很簡單的:

用一個佇列來存放所有的物件,需要時get一個物件,從佇列頭取一個物件,當用完後,重新將該物件投入到佇列尾部。

#ifndef OBJ_POOL_H_
#define OBJ_POOL_H_

#include <queue>
#include <memory>
#include <stdexcept>

using std::queue;
using std::shared_ptr;


template <typename T>
class ObjPool{
	
public:
		ObjPool(int size=defaultSize) throw(std::invalid_argument,std::bad_alloc){
			if(0==size){
				throw std::invalid_argument("size can't not small than zero");
			}
		
			mSize=size;
			allocateChunk();
		
		}


		shared_ptr<T> getObj(){
			if(freeList.empty()){
				allocateChunk();
			}

			auto obj=freeList.front();
			freeList.pop();
			return obj;
		}
		
		void releaseObj(shared_ptr<T> obj){
			freeList.push(obj);
		}


protected:

		queue<shared_ptr<T>> freeList;

		int mSize;

		static const int defaultSize=30;

		void allocateChunk(){
			for(int i=0;i<mSize;i++){
				freeList.push(std::make_shared<T>());
			}
		
		}

private:
		ObjPool(const ObjPool<T> &src)=delete;
		ObjPool<T> &operator=(const ObjPool<T> &rhs)=delete;
	







};

#endif


—————————————————————————————————————————————————————————————————

//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點選左上方郵件地址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。

轉載請註明出處:http://blog.csdn.net/qq844352155

author:天下無雙

Email:[email protected]

2015-7-18

於廣州天河荷光路

——————————————————————————————————————————————————————————————————


相關推薦

unity中實現簡單物件,附教程原理

Unity物件池的建立與使用 本文提供全流程,中文翻譯。 Chinar 堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) Chinar —— 心分享、心創新!助力快速完成 Unity

C++實現簡單物件

物件池的實現其實是非常簡單的 思想也是很簡單的: 用一個佇列來存放所有的物件,需要時get一個物件,從佇列頭取一個物件,當用完後,重新將該物件投入到佇列尾部。 #ifndef OBJ_POOL_H_

C++實現簡單執行緒

執行緒池 什麼是執行緒池 在使用執行緒的CS模型中,伺服器端每接收到一個客戶端請求,都會為客戶端建立執行緒資源,當有大量突發性請求時,伺服器來不及為每個客戶端建立執行緒。執行緒每次的建立與銷燬都會耗費伺服器大量資源與時間,可以在伺服器一開始就建立好一堆執行緒,等到客戶端請求來

C++實現簡單的文本查詢

ber number map () first begin ifstream adf times 1 該程序將讀取用戶指定的任意文本文件,然後允許用戶從該文件中查找單詞。查詢的結果是該單詞出現的次數,並列出每次出現所在的行。如果某單詞在同一行中多次出現,程序將只顯示該

C#實現簡單的Http請求實例

semaphore bsp .text block 通過 renren www 字節 req 本文實例講述了C#實現簡單的Http請求的方法。分享給大家供大家參考。具體分析如下: 通過.Net中的兩個類HttpWebRequest類,HttpWebResponse類來實現

C#實現簡單獲取及設置Session類

static 相互 如何 相互轉換 per body share line window 本文實例講述了C#實現簡單獲取及設置Session類。分享給大家供大家參考。具體分析如下: 這是一個簡單的C#獲取Session、設置Session類文件,本類主要實現大家最常用的兩

C#實現簡單的冒泡排序

read pro i++ cto bsp con nbsp ces nag 1、C#代碼下:using System;namespace ConsoleApplication1{ class Program { static void Main()

C++實現內存

C++ 內存池 代碼參考leveldb實現內存池的方法,由於實際工作中暫時未用到過內存池,因此這裏只是一個簡單的內存池實現,後續有需要時,可以根據實際需求再對代碼進行修改。arena.h#ifndef ARENA_H #define ARENA_H #include <stdi

c實現 簡單的文件管理 不含交互

字符 當前 str2 masm 器) 上層 stream file style 實現如下功能: 1、讀取指定目錄下的所有子目錄和文件信息(比如:指定目錄為C:/temp則把此目錄 下的所有子目錄下的文件信息讀出來)2、在C盤創建一個以個人姓名命名的目錄(比如:張三)3、在

C++ 實現簡單命令行學生管理系統

什麽 cos wid 屏幕 cit 環境 iterator choice umeng C++ 實現簡單命令行學生管理系統 貼吧ID: 這把問題不大 編譯環境是macOS。system(“clear”) 在windows下請換成 system(“cls”) #include

c++實現簡單的string類

學得快,忘得快,老師講完了運算子過載這一節然後就帶我們開發一個字串類,我的程式碼也是在理解的基礎上跟著老師敲的,覺得太有意思了!!!趕緊寫部落格總結一下,加深理解,希望我這記性別讓我失望!其實字串也是可以理解為字元陣列,所以在類中有兩個屬性,字串長度len和字元指標,當定義mystring

C++實現簡單的檔案I/O操作

檔案 I/O 在C++中比烤蛋糕簡單多了。 在這篇文章裡,我會詳細解釋ASCII和二進位制檔案的輸入輸出的每個細節,值得注意的是,所有這些都是用C++完成的。 一、ASCII 輸出 為了使用下面的方法, 你必須包含標頭檔案<fstream.h>(譯者注:在標準C++中,已

c++實現簡單的Http客戶端協議,WebRequest

      最近要寫一個代理程式,軟體最終要跑在嵌入式裝置上,其中一部分是需要做一個簡單爬蟲程式,用來操作嵌入式裝置的Web服務上的資訊,我不想用第三方的任何庫,如是簡單看了下http協議,用一天時間實現了http協議的客戶端,實現Get,Post,UpFile(檔案上傳)等

C#實現簡單的學生管理系統增刪改查

1.Programs.cs using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using Syste

c#實現簡單文字編譯器

上學期有個程式設計實驗,其中一個是需要實現一個帶介面的簡單文字編輯器。這裡選擇用c#來實現。 頁面設計和具體功能 在檔案處選擇新建一個文字,這裡的文字使用窗體實現載入 有一些快捷鍵:比如字型選擇按鈕,點選以後可以出現一個窗體,實現字型的選擇。但是這裡貌似有點

C#實現簡單的計算器

用文字框接收點選button時的資訊來實現簡單資料兩個數之間的加減: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using

C++ 實現簡單的連結串列操作

C++簡單鏈表 實現幾個基本操作 其中倒敘,排序方法 使用陣列來生成連結串列,導致 刪除方法 使用delete p1 出錯 如需修改可評論 #include <iostream> #include <string.h> using namespace std; c

大二上期資料結構實驗記錄(二)【初版】C實現簡單一元多項式加減乘求導及代值計算(有借鑑刪改)

想要記錄自己程式設計思維的成長所以發到部落格,歡迎並且感激大家指出缺點和錯誤! 一、【實驗構思(Conceive)】 本次實驗要求是用C或C++語言設計並實現一個一元稀疏多項式的簡單計算器,要求是要有如下功能 1、輸入並建立多項式 2、輸出多項式,序列按指數降序

c++實現簡單日期類

概要 下面這一大塊程式碼主要練習了 運算子過載。設定了一個日期類。如有問題請看註釋。 //Date.h #include<iostream> #include<Windows.h> using namespace std; class

Linux C實現簡單的shell

Linux C下實現簡單的Shell 宗旨:技術的學習是有限的,分享的精神是無限的。 【需求描述】 用各種C函式實現一個簡單的互動式Shell: 1、給出提示符,讓使用者輸入一行命令,識別程式名和引數並呼叫適當的exec函式執行程式,待執行完成後再次給出提示符。 2、識