类实例的唯一ID

时间:2016-11-05 22:59:22

标签: c++ class identifier

我有一个这样的课程:

class ExampleClass {

private:
    int _id;
    string _data;

public:
    ExampleClass(const string &str) {
        _data = str;
    }
    ~ExampleClass() {

    }
    //and so on...    

}

如何在不使用全局变量的情况下为类的每个实例添加唯一(!)整数标识符(_id)?

2 个答案:

答案 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}}

分配为唯一ID