我有一个这样的课程:
class ExampleClass {
private:
int _id;
string _data;
public:
ExampleClass(const string &str) {
_data = str;
}
~ExampleClass() {
}
//and so on...
}
如何在不使用全局变量的情况下为类的每个实例添加唯一(!)整数标识符(_id)?
答案 0 :(得分:1)
使用私有静态成员int,在类的所有实例之间共享。 在构造函数中的static int中只需递增它,并将其值保存到id成员中;
class ExampleClass {
private:
int _id;
string _data;
static int counter=0;
public:
ExampleClass(const string &str) {
_data = str;
id=++counter;
}
<强>更新强>
您需要在复制构造函数和operator =中考虑您想要的行为(取决于您的需求,新对象或相同的行为)。
答案 1 :(得分:0)
您可以在班级中隐藏静态数据,这将提供唯一ID。
示例:强>
class ExampleClass {
private:
int _id;
static int idProvider;
public:
ExampleClass(const string &str)
: _id(++idProvider)
{}
}
int ExampleClass::idProvider = 0;
逻辑是,每当您创建ExampleClass
对象时,它都会增加idProvider
,然后id
将{{1}}