如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
How assigning unique identifiers to an object that increase but remembers deletion of previous objects, in C++
1. 问题所在
我希望每个对象都有一个唯一的 ID,但是,使用此代码,ID 会增加但永远不会减少。如何拥有一个取决于现有对象编号的唯一 ID。
2. 守则
#include <iostream>
#include <vector>
class UniqueID {
protected:
static int nextID;
public:
int id;
UniqueID();
~UniqueID();
UniqueID(const UniqueID& orig);
UniqueID& operator=(const UniqueID& orig);
};
int UniqueID::nextID = 0;
UniqueID::UniqueID() {
id = ++nextID;
}
UniqueID::~UniqueID() {
}
UniqueID::UniqueID(const UniqueID& orig) {
id = orig.id;
}
UniqueID& UniqueID::operator=(const UniqueID& orig) {
id = orig.id;
return(*this);
}
int main()
{
std::vector<UniqueID> UniqueIDs;
for (int i = 0; i < 3; i++)
{
UniqueID e;
UniqueIDs.push_back(e);
std::cout <<"Create "<< e.id << std::endl;
}
std::cout << "n";
//Delete..
for (int b = int(UniqueIDs.size()) - 1; b >= 0; b--)
{
std::cout << "Delete "<< UniqueIDs[b].id << std::endl;
UniqueIDs.erase(UniqueIDs.begin() + b);
}
std::cout << "n";
//Here the new object should get the ids for 1 to 4
for (int i = 0; i < 3; i++)
{
UniqueID e;
UniqueIDs.push_back(e);
std::cout << "Create " << e.id << std::endl;
}
}
3. 输出
输出为:
Create 1
Create 2
Create 3
Delete 3
Delete 2
Delete 1
Create 4
Create 5
Create 6
4. 我想要什么
我希望有:
Create 1
Create 2
Create 3
Delete 3
Delete 2
Delete 1
Create 1
Create 2
Create 3
删除其中一些 ID 后,我如何记住从哪里开始?
ID通常不会像这样重复使用是有原因的,这是因为您必须保留备用 ID 的集合或已用 ID 的集合,并且无法扩展(除非您人为地将自己限制在少量"插槽"中(。
数据库只是自动递增到整数范围的顶部,然后绕回(您不太可能同时拥有 40 亿个对象!在代码中,通常只使用对象的地址,该地址已保证在其生存期内是唯一且稳定的。
相关文章:
- 线程调用的函数对对象删除是否安全?
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 使用 com 对象删除计划任务
- C 将对象删除为参考
- C样式对象删除的包装器
- 静态映射中动态分配的对象.删除必要的
- C++指向对象删除的指针数组,"Debug assertion failure!"
- 在其成员函数返回之前,将对象删除是不确定的行为吗?
- Python 对象删除检测
- C++安全对象删除
- Qt:RemoveWidget和对象删除
- Qt对象删除导致崩溃
- 删除由两个shared_pointer实例管理的对象(删除其中一个)
- 顶点缓冲区对象(删除进程)opengl
- 设计 -- 按名称或对象删除
- 提升中的异常:进程间,共享内存对象删除
- 使用std::function和std::bind来存储回调并处理对象删除
- 如何使用智能指针防止双重对象删除
- 指针指向对象删除时自动为空
- 对象层次结构中的对象删除责任