我正在编写一个系统,其中我有一个Object
个集合,每个Object
都有一个唯一的整数ID.下面是我在C++中的实现方法:
class Object {
public:
Object(): id_(nextId_++) { }
private:
int id_;
static int nextId_;
}
int Object::nextId_ = 1;
这显然不是线程安全的,但是如果我想要的话,我可以将nextId_
设为std::atomic_int
,或者在nextId_++
表达式周围加一个互斥体.
在Rust (最好是安全的)情况下,我该怎么做?没有静态 struct 成员,全局可变变量也不安全.我总是可以将nextId
传递到new
函数中,但是这些对象将被分配到多个位置,我不希望将nextId
传递到任何地方.思想?