std::allocator 的简单用法
来源:互联网 发布:windows 评估副本 编辑:程序博客网 时间:2024/06/05 15:15
#include <memory>//shared_ptr && allocator/* *@brief *Xxx内存池 *@multi-thread-safe:NO */class XxxMemoryPool{friend class XxxMgr;typedef std::shared_ptr<Xxx> XxxPtr;typedef std::allocator<char> XxxPool;typedef std::shared_ptr<XxxPool> PoolPtr;public:~XxxMemoryPool();private:XxxMemoryPool() = default;void Init();XxxPtr GetXxx();void Free(Xxx* ptr);private:PoolPtr _Xxx_pool;const static int Xxx_SIZE = sizeof(Xxx);};//////////////////////////////////////////////////////////////////////////XxxMemoryPool::~XxxMemoryPool(){}void Xxx_client::XxxMemoryPool::Init(){if (_Xxx_pool){_Xxx_pool.reset();_Xxx_pool = nullptr; }_Xxx_pool = PoolPtr(new XxxPool());if (!_Xxx_pool){const char *err_msg = "new a memory pool failed.";LOG4CPLUS_ERROR(Logger::getRoot(), err_msg);throw err_msg;}}XxxMemoryPool::XxxPtr XxxMemoryPool::GetXxx(){if (!_Xxx_pool){LOG4CPLUS_ERROR(Logger::getRoot(), "the memory pool ptr is nullptr. don't allocate memory.");return nullptr;}void* buff = _Xxx_pool->allocate(Xxx_SIZE);if (buff){Xxx* Xxx = new(buff)Xxx;XxxPtr Xxx_ptr(Xxx, std::bind(&XxxMemoryPool::Free, this, std::placeholders::_1));return Xxx_ptr;}else{LOG4CPLUS_ERROR(Logger::getRoot(), "allocate memory failed.");return nullptr;}}void Xxx_client::XxxMemoryPool::Free(Xxx* ptr){if (ptr){ptr->~Xxx();char* p = (char*)(ptr);_Xxx_pool->deallocate(p, Xxx_SIZE);}else{LOG4CPLUS_ERROR(Logger::getRoot(), "don't free memory because ptr passed in is nullptr.");}}
0 0
- std::allocator 的简单用法
- std allocator
- allocator 的用法
- c++ 一个简单的allocator
- STL 简单 allocator 的实现
- "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const"问题的解决办法
- 遵照std::allocator实现自定制的内存分配器
- undefined reference to `std::allocator<char>::~allocator()'
- std::regex用法,简单例子
- 不允许使用“{...}”对”std::vector<int,std::allocator<int> >“类型的对象进行初始化
- 一个简单的空间配置器: allocator
- std::copy 的用法
- std::string的用法
- std::map的用法
- std::string的用法
- std::string的用法 .
- std::stringstream的用法
- std::mutex的用法
- DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
- hdu1878欧拉回路(DFS+欧拉回路)
- java IO 总结 (待续)
- RabbitMQ源码解析前奏--管理与监控
- 树形DP - hdu5293 Tree chain problem
- std::allocator 的简单用法
- Android Universal Image Loader 源码分析(二)
- iOS入门(五)数组排序
- 给phpcms v9增加远程模型及远程栏目
- DeepLearning tutorial(6)易用的深度学习框架Keras简介
- javaScript的运算符和if。。else语句
- EasyUi合并表头
- 2个创业项目失败总结
- HDU 2084(数塔)动态规划-数塔问题