我想有一个唯一的ID为每个对象,但与此代码增加但不减少,我如何才能有一个唯一的ID依赖于存在的对象的数字。
#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;
}
}
输出为:
Create 1
Create 2
Create 3
Delete 3
Delete 2
Delete 1
Create 4
Create 5
Create 6
我希望:
Create 1
Create 2
Create 3
Delete 3
Delete 2
Delete 1
Create 1
Create 2
Create 3
ID通常不会这样重复使用是有原因的,这是因为您必须保留一个备用ID的集合,或者保留一个使用过的ID的集合,而且这不会扩展(除非您人为地将自己限制在少量的“插槽”中)。
数据库只需自动递增到整数范围的顶部,然后返回(您不太可能同时拥有40亿个对象!)。 在代码中,通常只使用对象的地址,该地址已经保证在其生存期内是唯一和稳定的。