Форум программистов, компьютерный форум CyberForum.ru

Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением - C++

Восстановить пароль Регистрация
 
 
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 08:56     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #1
Как бы это поле реализовать? При передаче экземпляра значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться, в остальных случаях требуется генеринг нового уникального значения при каждом создании нового экземпляра. Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2014, 08:56     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Посмотрите здесь:

Написать класс, от которого можно получить только один экземпляр класса C++
C++ В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки
Класс, для полей которого нужно использовать класс C++
Создать экземпляр структуры шаблонного класс C++
Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
14.03.2014, 10:44     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #21
Цитата Сообщение от aLarman Посмотреть сообщение
mustimur, это шедееевр

Не по теме:

Ну простите пытаюсь найти самое простое решение....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
14.03.2014, 10:47     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #22
Я бы сделал так:
1. закрыл (private) все создающие конструкторы, вместо них в интерфейсе должны быть явно вызываемые функции типа create(...) или create_dynamic(...). Они возвращают уже готовый объект (или указатель на него).
2. конструкторы копирования, перемещения и оператор= - открытые.
3. ну и этот UID - что-то типа GUID'а, 128 бит вроде должно хватить на обозримый период времени Но если мало - можно и 256 бит забабахать. Функция генерации нового уникального UID вызывается только при создании нового объекта, но не при копировании существующего. А создание нового объекта в силу п.1 можно сделать только явным вызовом функции create.

Какие "дыры" могут оказаться в реализации такой схемы?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:53     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #23
Цитата Сообщение от CheshireCat Посмотреть сообщение
Какие "дыры" могут оказаться в реализации такой схемы?
Цитата Сообщение от CheshireCat Посмотреть сообщение
2. конструкторы копирования, перемещения и оператор= - открытые.
C++
1
2
3
4
5
class A
{};
  
A object;
A object2 = object;//констр копир
Добавлено через 58 секунд
создали новый объект с тем же UID

Добавлено через 3 минуты
Кстати, есть такая штука в boost или 11 с++ как ref() этот объект копировать можно, но он не копирует то, на что создана ссылка, если не хотите юзать boost или нет 11 с++, то можно самому описать этот класс
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:54     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #24
соответственно везде где есть копирование передавать объект std::ref(Ваш класс)
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
14.03.2014, 10:54     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #25
А разве не того же самого хотел ТС? Или я неправильно понял?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:57     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #26
Цитата Сообщение от CheshireCat Посмотреть сообщение
А разве не того же самого хотел ТС?
при создании экземпляра ему (экземпляру) новый UID давать) создавать можно как конструктором так и конструктором копирования, сделать генерацию нового UID там вроде бы логично, но есть проблема с конструктором копирования, он еще может использовать при передаче по значени, где не надо генерить новый UID
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 11:19  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #27
Цитата Сообщение от mustimur Посмотреть сообщение
Так этого объекта нет уже, так зачем занимать его UId?
Затем, что UID - это параметр функции-члена контейнерного класса, осуществляющей поиск, возвращающей индекс найденного элемента, а если объект уже удалён, то она должна вернуть
C++
1
std::numeric_limits<size_t>::max()
, что будет признаком ошибки. А теперь представь, что до попытки поиска UID удалённого объекта оказался занят новым объектом. Что она вернёт? Правильно, индекс этого нового объекта, сообщения же об ошибке не будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 17:15     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Еще ссылки по теме:

Каждый созданный экземпляр класса должен увеличивать значение счетчика на 1 C++
C++ В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением
C++ Есть массив Т [5], каждый элемент которого имеет тип "Структура Телефон". Ввести его с клавиатуры

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
14.03.2014, 17:15     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #28
Цитата Сообщение от taras atavin Посмотреть сообщение
А теперь представь, что до попытки поиска UID удалённого объекта оказался занят новым объектом. Что она вернёт? Правильно, индекс этого нового объекта, сообщения же об ошибке не будет
Да понял я это, я просто искал простое решение, тем паче, что в первой теме таких пояснений нет
Yandex
Объявления
14.03.2014, 17:15     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Ответ Создать тему
Опции темы

Текущее время: 17:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru