C++ 创建数字池

C++ 创建数字池,c++,C++,我创建了一个简单的容器类,它保存来自唯一数字池的数字。然后在容器销毁之前将数字返回池 //Pooled.hpp #pragma once #include <queue> class Pooled { public: Pooled(); ~Pooled(); //Edit: disable copy and copy assignment here const int number; private: int getNumber();

我创建了一个简单的容器类,它保存来自唯一数字池的数字。然后在容器销毁之前将数字返回池

//Pooled.hpp
#pragma once

#include <queue>

class Pooled {
public:
    Pooled();
    ~Pooled();
    //Edit: disable copy and copy assignment here
    const int number;
private:
    int getNumber();
    static std::queue<int> pool;
    static int currentSize;
};
//Pooled.hpp
#布拉格语一次
#包括
班级集合{
公众:
汇集();
~Pooled();
//编辑:在此处禁用复制和复制分配
常数整数;
私人:
int getNumber();
静态std::队列池;
静态电流大小;
};

//Pooled.cpp
#包括“Poolled.hpp”
std::队列池::池;
int Pooled::currentSize=1;
Pooled::Pooled():number(getNumber()){}
池::~poolled(){
pool.push(数字);
}
int Pooled::getNumber(){
if(pool.empty()){
pool.push(当前大小);
currentSize++;
}
int newNumber=pool.front();
pool.pop();
返回newNumber;
}
但假设我想创建多个数字池。我可以在某处定义任意数量的
std::queue
s,然后让每个
poold
对象持有对特定对象的引用。但这会使每个
池中的
对象的大小增加一倍


或者,我可以为我需要的每个池创建一个类,比如
Pooled1
Pooled2
,这听起来很傻,但每个对象都很小。有什么方法可以实现这两个目标吗?

您可以维护一个共享的
静态向量
。使用std::vector模板可以为您需要的每个池创建类,而无需复制代码。隐式复制是不行的;当副本和原始副本上的析构函数运行完毕后,您的池中将有一个数字的两个副本。对,允许复制唯一数字是没有意义的。
//Pooled.cpp
#include "Pooled.hpp"

std::queue<int> Pooled::pool;
int Pooled::currentSize = 1;

Pooled::Pooled() : number(getNumber()) {}

Pooled::~Pooled() {
    pool.push(number);
}

int Pooled::getNumber() {
    if (pool.empty()) {
        pool.push(currentSize);
        currentSize++;
    }
    int newNumber = pool.front();
    pool.pop();
    return newNumber;
}