c++实现简易内存对象池

目的
1、防止内存频繁 游走在new和delete中被折磨;
2、减少内存碎片的产生,同时稍稍的提高下性能。

思路
1、外界有内存需求的时候,就去memory_pool获取;
2、外界用完某块内存之后,就归还memory_pool;
3、memory_pool 这个类来管理内存。

代码

#ifndef MEMORY_POOL_H__
#define MEMORY_POOL_H__

#include <deque>
#include <memory>

template <class T>
class memory_pool 
{
	memory_pool(const memory_pool&) = delete;
	const memory_pool& operator=(const memory_pool&) = delete;

 public:
	 memory_pool() {
    // nothing
	}
	~memory_pool() 
	{
		clear();
	}

	std::shared_ptr<T> allocate()
	{
		std::shared_ptr<T> item = nullptr;
		if (!free_items_.empty()) 
		{
			item = free_items_.front();
			free_items_.pop_front();
		} 
		else
		{
			item = std::make_shared<T>();
		}
		return item;
	}
	
	void release(const std::shared_ptr<T>& item)
	{
		free_items_.push_back(item);
	}

	void clear()
	{
		free_items_.clear();
	}

	int size()
	{
		return free_items_.size();
	}
 private:
	 std::deque<std::shared_ptr<T>> free_items_;
};
#endif 

简单示例

memory_pool<Cls> memory_pool_;
void test()
{
	auto& value = memory_pool_.allocate();
	.......
	memory_pool_.release(value );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值