Я пишу систему, в которой у меня есть коллекция Object
s, и каждый Object
имеет уникальный интегральный идентификатор. Вот как я хотел бы сделать это в C++:Создайте последовательные идентификаторы для каждого экземпляра структуры
class Object {
public:
Object(): id_(nextId_++) { }
private:
int id_;
static int nextId_;
}
int Object::nextId_ = 1;
Это, очевидно, не thread_safe, но если бы я хотел, чтобы это было, я мог бы сделать nextId_
в std::atomic_int
, или обернуть вокруг семафор выражения nextId_++
.
Как бы это сделать (желательно безопасно) ржавчины? Нет статических элементов структуры, а также глобальных переменных переменных. Я всегда мог пройти nextId
в функцию new
, но эти объекты будут выделены в нескольких местах, и я бы предпочел не прокладывать номер nextId
сюда и yon. Мысли?
Ах, я всегда забываю, вы можете статически инициализировать атомное, намного чище! – Shepmaster
Я думал, что должен быть конструктивным, а не просто nitpick с комментарием на один раз здесь, на SO. Не уверен, что это удалось. Вот пример. :) – bluss
Нет, добавление ответа всегда является лучшей идеей в таких случаях. Больше людей увидят это таким образом, и в конечном итоге он может получить больше голосов, чем другие ответы, если это будет лучше. Плюс вы получаете больше очков таким образом, и все любят очки! – Shepmaster