Что касается создания уникальных идентификаторов индексов для объектов, я подумал об использовании числового значения их указателей в качестве идентификатора. Поскольку они всегда гарантируют уникальность, это избавило бы меня от необходимости генерировать уникальные числа, не беспокоясь о совпадении.
В принципе:
typedef uintptr_t T_Index;
T_Index getIndex()
{
return (T_Index)this;
}
Мой вопрос, это будет безопасно? Или адреса указателей могут измениться каким-то образом? Очевидно, что операции перемещения могут сделать индекс недействительным, но если конструкция перемещения и назначение перемещения отключены, будет ли это безопасно?
Этот вопрос похож:
Насколько плохо использовать целочисленные указатели в качестве уникальных идентификаторов? C ++ 11, но сфера действия этого вопроса довольно расплывчата. Большинство людей там, в первую очередь, обеспокоены производительностью и тому подобным, и ОП там заявил, что его объекты никогда не уничтожаются (что в моем случае почти наверняка произойдет). Мой вопрос не о производительности, а о том, будут ли основанные на указателе уникальные индексы безопасными для использования на неподвижных объектах.
Незначительная побочная тема: очевидно, что указатели не будут работать на нескольких процессах или на нескольких компьютерах. Хотя я полагаю, что у одного все еще может быть один процесс / компьютер, который обрабатывает индексы (вы, вероятно, должны в любом случае) и, возможно, добавляете идентификатор процесса / компьютера / IP / порта по мере необходимости.
Задача ещё не решена.