c ++中的静态计数器

Jja*_*ang 9 c++ static counter class

我正在尝试创建一个Data类,其对象每个都拥有唯一的ID.

我希望第一个对象的ID为1,第二个为2,等等.我必须使用a static int,但所有对象都具有相同的ID,而不是1,2,3 ......

这是Data班级:

class Data
{
private:
   static int ID;
public:
   Data(){
   ID++;
   }
};
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,所以第一个ID将是1,第二个将是2,等等.?

Luc*_*ore 18

这个:

class Data
{
private:
   static int ID;
   const int currentID;
public:
   Data() : currentID(ID++){
   }
};
Run Code Online (Sandbox Code Playgroud)

除静态计数器外,还需要一个实例绑定成员.

  • 成员id应该是一个`const`字段.一旦创建了对象,改变它可能几乎没有任何意义.它还会自动禁止`operator =`覆盖对象的id,即使用户有责任提供不重用源对象id的拷贝构造函数. (3认同)

Bra*_*ady 9

如果ID是静态的,那么它将具有所有类实例的相同值.

如果您希望每个实例都具有顺序ID值,那么您可以将静态属性与类变量组合,如下所示:

class Data
{
private:
   static int ID;
   int thisId;
public:
   Data(){
   thisId = ++ID;
   }
};

int Data::ID = 0;
Run Code Online (Sandbox Code Playgroud)

如果应用程序是多线程的,那么你必须将它与pthread互斥锁等同步.