我创建了一个简单的容器类,它包含一个唯一数字池中的数字。然后在销毁容器之前将数字返回池中。
//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.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;
}
但是,我想说我想创建多个数字池。我可以在某处定义任意数量的std::queue<int>
s,然后让每个Pooled
对象保存对特定对象的引用。但这会使每个Pooled
对象的大小翻倍。
或者我可以为我需要的每个游泳池创建一个类,例如Pooled1
,Pooled2
听起来相当愚蠢,但保持每个对象都很小。有没有办法实现这两个目标?