当程序中需要用到一定数量的对象,且创建对象开销比较大时可以考虑使用对象池模式。和线程池类型,需要预先创建一定数量的对象,上层使用时可以从池子中获取创建好的对象。本文的对象池模式实现可变参数构造对象,使用完成之后自动析构。
#include <functional>
#include <string>
#include <memory>
#include <iostream>
#include <map>
constexpr int kMaxObjectNum = 10;
template<typename T>
class ObjectPool {
public:
ObjectPool(int max_object_num = kMaxObjectNum)
: max_object_num_(max_object_num) {
}
template<typename...Args>
bool Init(size_t const object_num, Args&&...args) {
if (object_num <=0 || object_num > max_object_num_) {
return false;
}
auto obj_name = typeid(ObjectType<Args...>).name();
for (size_t i = 0; i