成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手?jǐn)]一個(gè)對(duì)象池,你學(xué)會(huì)了嗎?

開發(fā) 前端
對(duì)象的池子,與線程池、內(nèi)存池類似,減少頻繁創(chuàng)建和銷毀對(duì)象帶來的成本(特別是消耗資源較大的對(duì)象),可用于實(shí)現(xiàn)對(duì)象的緩存和復(fù)用。這也算是一種設(shè)計(jì)模式。

[[427113]]

 什么是對(duì)象池?

對(duì)象的池子,與線程池、內(nèi)存池類似,減少頻繁創(chuàng)建和銷毀對(duì)象帶來的成本(特別是消耗資源較大的對(duì)象),可用于實(shí)現(xiàn)對(duì)象的緩存和復(fù)用。這也算是一種設(shè)計(jì)模式。

話不多說,直接上代碼:

  1. #include <algorithm> 
  2. #include <cassert> 
  3. #include <cmath> 
  4. #include <complex> 
  5. #include <iostream> 
  6. #include <memory> 
  7. #include <numeric
  8. #include <vector> 
  9.  
  10. struct A { 
  11.     A(std::string s) { str_ = std::move(s); } 
  12.  
  13.     void print() { std::cout << str_ << std::endl; } 
  14.  
  15.     std::string str_; 
  16. }; 
  17.  
  18. template <typename T, typename Allocator = std::allocator<T>> 
  19. class ObjectPool { 
  20.    public
  21.     ObjectPool() = default
  22.     ~ObjectPool() { 
  23.         assert(freeObjects_.size() == kInitChunkSize * (std::pow(2, pool_.size()) - 1)); 
  24.  
  25.         size_t chunkSize{kInitChunkSize}; 
  26.         for (auto* chunk : pool_) { 
  27.             allocator_.deallocate(chunk, chunkSize); 
  28.             chunkSize *= 2; 
  29.         } 
  30.         pool_.clear(); 
  31.     } 
  32.  
  33.     template <typename... Args> 
  34.     std::shared_ptr<T> acquireObject(Args... args) { 
  35.         if (freeObjects_.empty()) { 
  36.             addChunk(); 
  37.         } 
  38.  
  39.         T* object{freeObjects_.back()}; 
  40.  
  41.         new (object) T{std::forward<Args>(args)...}; 
  42.  
  43.         freeObjects_.pop_back(); 
  44.  
  45.         return std::shared_ptr<T>(object, [this](T* object) { 
  46.             std::_Destroy(object); 
  47.             freeObjects_.push_back(object); 
  48.         }); 
  49.     } 
  50.  
  51.    private: 
  52.     std::vector<T*> pool_; 
  53.  
  54.     std::vector<T*> freeObjects_; 
  55.  
  56.     static const size_t kInitChunkSize{5}; 
  57.  
  58.     size_t newChunkSize{kInitChunkSize}; 
  59.  
  60.     void addChunk() { 
  61.         std::cout << "add Chunk \n"
  62.  
  63.         auto* firstNewObject{allocator_.allocate(newChunkSize)}; 
  64.         pool_.push_back(firstNewObject); 
  65.  
  66.         auto oldFreeObjectSize{freeObjects_.size()}; 
  67.         freeObjects_.resize(oldFreeObjectSize + newChunkSize); 
  68.         std::iota(std::begin(freeObjects_) + oldFreeObjectSize, std::end(freeObjects_), firstNewObject); 
  69.  
  70.         newChunkSize *= 2; 
  71.     } 
  72.  
  73.     Allocator allocator_; 
  74. }; 
  75.  
  76. using APool = ObjectPool<A>; 
  77.  
  78. int main() { 
  79.     APool pool; 
  80.     for (int i = 0; i < 20; i++) { 
  81.         auto x = pool.acquireObject(std::string("hello")); 
  82.         x->print(); 
  83.     } 
  84.     return 0; 

上面的對(duì)象池實(shí)現(xiàn)在每次請(qǐng)求對(duì)象的時(shí)候都調(diào)用了構(gòu)造函數(shù)和析構(gòu)函數(shù),這里大家可以根據(jù)實(shí)際情況自行選擇是否必要調(diào)用。如果構(gòu)造和析構(gòu)成本也比較高,可以再想辦法節(jié)省對(duì)應(yīng)的開銷。

 

責(zé)任編輯:武曉燕 來源: 程序喵大人
相關(guān)推薦

2022-02-08 09:09:45

智能指針C++

2023-03-26 22:02:53

APMPR監(jiān)控

2024-06-21 08:15:25

2024-06-19 09:47:21

2023-09-19 08:03:50

rebase?merge

2023-04-27 08:42:50

效果

2024-04-01 08:13:59

排行榜MySQL持久化

2024-01-05 07:46:15

JS克隆對(duì)象JSON

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2023-01-10 08:43:15

定義DDD架構(gòu)

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-01-02 12:05:26

Java并發(fā)編程

2024-09-26 09:10:08

2023-11-27 07:33:55

2023-10-26 07:15:46

2023-07-10 07:17:29

無效化空窗口

2022-04-26 10:47:53

分配權(quán)限vuejs

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 2018国产大陆天天弄 | 亚洲激情在线视频 | 精品日韩在线 | 伊人一区 | 一级一级毛片免费看 | 成人福利在线观看 | 蜜桃在线一区二区三区 | www.99re| 狠狠干av | 久久久久久成人网 | 老头搡老女人毛片视频在线看 | 国产欧美一区二区精品久导航 | 理论片午午伦夜理片影院 | 中文字幕在线免费观看 | 亚洲视频免费在线看 | 中文字幕在线第二页 | 农村真人裸体丰满少妇毛片 | 岛国毛片| 一区精品视频在线观看 | 欧美久久国产精品 | 综合色播 | 精品久久久久一区二区国产 | 男人亚洲天堂 | 久久久国产一区二区三区四区小说 | 日韩精品一区二区在线观看 | 夜夜骑首页| 欧美日韩不卡 | 中文字幕三区 | 久久一区视频 | 精品福利在线 | 超碰在线网站 | a级片网站 | 国产免费福利小视频 | 久久里面有精品 | 精彩视频一区二区三区 | 懂色中文一区二区三区在线视频 | 国产成人免费在线观看 | 91动漫在线观看 | 欧美成年黄网站色视频 | 蜜臀久久| 国产福利小视频 |