#ifndef DATABUFFER_H #define DATABUFFER_H #include #include #include // ...existing code... template class MemoryPool { public: MemoryPool(size_t size); template MemoryPool(size_t size, Args &&...args) { for (size_t i = 0; i < size; ++i) { T *obj = new T(std::forward(args)...); pool.push_back(obj); } } ~MemoryPool(); T *acquire(); void release(T *obj); private: std::vector pool; std::mutex mtx; std::condition_variable cv; }; // ...existing code... // ...existing code... template MemoryPool::MemoryPool(size_t size) { for (size_t i = 0; i < size; ++i) { pool.push_back(new T()); } } template MemoryPool::~MemoryPool() { for (T *obj : pool) { delete obj; } } template T *MemoryPool::acquire() { std::unique_lock lock(mtx); cv.wait(lock, [this] { return !pool.empty(); }); T *obj = pool.back(); pool.pop_back(); return obj; } template void MemoryPool::release(T *obj) { std::unique_lock lock(mtx); pool.push_back(obj); cv.notify_one(); } // ...existing code... #endif // DATABUFFER_H