c++如何写对象池,给个示例
时间: 2023-08-11 22:33:46 浏览: 46
对象池是一种用于缓存和重用对象的技术。在 C++ 中,可以通过定义一个对象池类来实现对象池。下面是一个简单的对象池示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class ObjectPool {
public:
ObjectPool() {}
~ObjectPool() {
for (auto obj : m_pool) {
delete obj;
}
m_pool.clear();
}
T* acquire() {
if (m_pool.empty()) {
return new T;
} else {
T* obj = m_pool.back();
m_pool.pop_back();
return obj;
}
}
void release(T* obj) {
m_pool.push_back(obj);
}
private:
vector<T*> m_pool;
};
class MyClass {
public:
MyClass() {
cout << "MyClass constructor" << endl;
}
~MyClass() {
cout << "MyClass destructor" << endl;
}
};
int main() {
ObjectPool<MyClass> pool;
MyClass* obj1 = pool.acquire();
pool.release(obj1);
MyClass* obj2 = pool.acquire();
return 0;
}
```
在上面的示例中,`ObjectPool` 类定义了一个对象池,其中 `acquire` 方法用于获取一个新的对象(如果池中没有可用的对象,则创建一个新对象),`release` 方法用于将对象返回到池中。在 `main` 函数中,我们创建了一个 `ObjectPool<MyClass>` 对象池,并使用 `acquire` 和 `release` 方法来获取和释放 `MyClass` 对象。当 `acquire` 方法被调用时,如果池中有可用的对象,则会返回一个对象,否则将创建一个新对象。当 `release` 方法被调用时,它将对象返回到池中,以便在以后可以被重用。