当前位置: 首页 > news >正文

做高端网站/seo优化技术是什么

做高端网站,seo优化技术是什么,起个娱乐网站名字,成都网站建设详细内容C 公共组件-对象池实现 对象池 对象池对于创建开销比较大的对象来说很有意义,为了避免重复创建开销比较大的对象,可以通过对象池来优化。对象池的思路比较简单,事先创建好一批对象,放到一个集合中,每当程序需要新的对…

C++ 公共组件-对象池实现

对象池

对象池对于创建开销比较大的对象来说很有意义,为了避免重复创建开销比较大的对象,可以通过对象池来优化。对象池的思路比较简单,事先创建好一批对象,放到一个集合中,每当程序需要新的对象时,就从对象池中获取,程序用完该对象后都会把该对象归还给对象池。这样会避免重复创建对象,提高程序性能。

基于C++11 简单实现对象池

1、这里需要注意的是,对象被回收之后它的状态并没有被清除,用户从池中获取对象之后最好先初始化或重置一下状态。
2、在对象池中创建不同的对象时,构造函数入参的引用将被忽略,即入参int和int&的构造函数会被认为是同一种类型的构造函数,因为在构造对象时无法获取变参Args…的引用类型,丢失了引用相关的信息。
3、github源码地址

#include<string>
#include<functional>
#include<memory>
#include<unordered_map>
#include <iostream>
using namespace std;const int MaxObjectNum = 10;class NonCopyable{
protected:NonCopyable() = default;virtual ~NonCopyable() = default;
public:NonCopyable(const NonCopyable&) = delete; // 禁用复制构造NonCopyable& operator = (const NonCopyable&) = delete;    // 禁用赋值构造
};template<typename T>
class ObjectPool : NonCopyable{template<typename... Args>using Constructor = std::function<std::unique_ptr<T>(Args...)>;using DelType = std::function<void(T*)>;public:// 默认创建多少个对象template<typename... Args>void Init(size_t num, Args&&... args){if (num<= 0 || num> MaxObjectNum)throw std::logic_error("object num out of range.");auto constructName = typeid(Constructor<Args...>).name(); // 不区分引用for (size_t i = 0; i <num; i++){m_object_map.emplace(constructName, std::unique_ptr<T>(new T(std::forward<Args>(args)...)));}}// 从对象池中获取一个对象template<typename... Args>std::unique_ptr<T,DelType> Get(){string constructName = typeid(Constructor<Args...>).name();auto range = m_object_map.equal_range(constructName);for (auto it = range.first; it != range.second; ++it){std::unique_ptr<T, DelType> ptr(it->second.release(), [this,constructName](T* p){m_object_map.emplace(constructName,unique_ptr<T>(p));    //删除函数执行的操作});m_object_map.erase(it);return ptr;}return nullptr;}inline size_t Size() const{return m_object_map.size();}inline bool empty() const{return m_object_map.empty();}
private:unordered_multimap<string, std::unique_ptr<T>> m_object_map;
};/*-----------------------------*/
struct BigObject{BigObject() = default;explicit BigObject(int a) {};BigObject(const int& a, const int& b){}void Print(const string& str){cout <<str<< endl;}
};template <typename T>
void Print(T&& p, const string& str){if (p != nullptr){p->Print(str);}
}void TestObjPool(){ObjectPool<BigObject> pool;pool.Init(2); // 初始化对象池,初始创建两个对象{auto p = pool.Get();Print(std::move(p), "p");pool.Get();std::cout<<"pool.size()="<<pool.Size()<<std::endl;}// 出了作用域之后,对象池返回出来的对象又会自动回收std::cout<<"pool.size()="<<pool.Size()<<std::endl;{pool.Get();pool.Get();std::cout<<"pool.size()="<<pool.Size()<<std::endl;}std::cout<<"pool.size()="<<pool.Size()<<std::endl;// 对象池支持重载构造函数{pool.Init(2, 1);auto p4 = pool.Get<int>();Print(std::move(p4), "p4");pool.Init(2, 1, 2);auto p5 = pool.Get<int, int>();Print(std::move(p5), "p5");}std::cout<<"pool.size()="<<pool.Size()<<std::endl;
}int main(){TestObjPool();return 0;
}
http://www.jmfq.cn/news/4812697.html

相关文章:

  • 口碑好的番禺网站建设/口碑营销5t
  • 微服务网站/线上培训平台
  • 旺店通erp客服电话/优化网站链接的方法
  • 省建设厅网站施工许可证办理/百度网址导航主页
  • 长沙理财网站建设/百度在线咨询
  • 贵阳网站建设报价/谷歌收录查询工具
  • 网站怎么做后台/微信公众号seo
  • 网站开发bbs/抖音代运营收费详细价格
  • 电梯配件做外贸在哪个网站/百度网页版入口
  • 兼职做视频的网站/今天高清视频免费播放
  • 微信微网站制作/百度搜索引擎的使用方法
  • 重庆律师网站/软件开发培训多少钱
  • 西安高端网站制作/软文推广系统
  • 招聘网站建设人员/东莞网站建设公司排名
  • 赌博网站怎么做/网页怎么制作
  • 高端网站建设公司/百度推广后台登录
  • 佛山做企业网站公司/云seo
  • 番禺建设网站公司哪家好/腾讯体育nba
  • 自己做网站前端开发/百度搜索引擎排名规则
  • 做国外网站赚钱/网络优化大师app
  • 烟台网站建站/关键词的优化方法
  • 网站建设的基本流程包括/百度指数下载手机版
  • 北京做网站制作的公司/互动网站建设
  • 国家住房和城乡建设网站/互联网媒体推广
  • 重庆智能网站建设价格/网站排名优化培训哪家好
  • 中职国示范建设网站/seo优化公司排名
  • 如何购买网站服务器/如何推广公司网站
  • 初学者做网站/百度seo代理
  • 东莞设计网站建设/怎么注册网站 个人
  • 定制网站开发价格/北京网站推广排名服务