Evgenii Legotckoi
Sept. 26, 2018, 4:55 p.m.

Example - Object Pool in C++

Example of the design pattern An object pool in the C ++ programming language.


  1. #include <string>
  2. #include <iostream>
  3. #include <list>
  4. class Resource
  5. {
  6. int value;
  7. public:
  8. Resource()
  9. {
  10. value = 0;
  11. }
  12. void reset()
  13. {
  14. value = 0;
  15. }
  16. int getValue()
  17. {
  18. return value;
  19. }
  20. void setValue(int number)
  21. {
  22. value = number;
  23. }
  24. };
  25. /* Note, that this class is a singleton. */
  26. class ObjectPool
  27. {
  28. private:
  29. std::list<Resource*> resources;
  30.  
  31. static ObjectPool* instance;
  32. ObjectPool() {}
  33. public:
  34. /**
  35. * Static method for accessing class instance.
  36. * Part of Singleton design pattern.
  37. *
  38. * @return ObjectPool instance.
  39. */
  40. static ObjectPool* getInstance()
  41. {
  42. if (instance == 0)
  43. {
  44. instance = new ObjectPool;
  45. }
  46. return instance;
  47. }
  48. /**
  49. * Returns instance of Resource.
  50. *
  51. * New resource will be created if all the resources
  52. * were used at the time of the request.
  53. *
  54. * @return Resource instance.
  55. */
  56. Resource* getResource()
  57. {
  58. if (resources.empty())
  59. {
  60. std::cout << "Creating new." << std::endl;
  61. return new Resource;
  62. }
  63. else
  64. {
  65. std::cout << "Reusing existing." << std::endl;
  66. Resource* resource = resources.front();
  67. resources.pop_front();
  68. return resource;
  69. }
  70. }
  71. /**
  72. * Return resource back to the pool.
  73. *
  74. * The resource must be initialized back to
  75. * the default settings before someone else
  76. * attempts to use it.
  77. *
  78. * @param object Resource instance.
  79. * @return void
  80. */
  81. void returnResource(Resource* object)
  82. {
  83. object->reset();
  84. resources.push_back(object);
  85. }
  86. };
  87. ObjectPool* ObjectPool::instance = 0;
  88. int main()
  89. {
  90. ObjectPool* pool = ObjectPool::getInstance();
  91. Resource* one;
  92. Resource* two;
  93. /* Resources will be created. */
  94. one = pool->getResource();
  95. one->setValue(10);
  96. std::cout << "one = " << one->getValue() << " [" << one << "]" << std::endl;
  97. two = pool->getResource();
  98. two->setValue(20);
  99. std::cout << "two = " << two->getValue() << " [" << two << "]" << std::endl;
  100. pool->returnResource(one);
  101. pool->returnResource(two);
  102. /* Resources will be reused.
  103. * Notice that the value of both resources were reset back to zero.
  104. */
  105. one = pool->getResource();
  106. std::cout << "one = " << one->getValue() << " [" << one << "]" << std::endl;
  107. two = pool->getResource();
  108. std::cout << "two = " << two->getValue() << " [" << two << "]" << std::endl;
  109.  
  110. return 0;
  111. }

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
  • A
    Oct. 19, 2024, 5:19 p.m.
    Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html