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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

14.03.2014, 08:56. Просмотров 770. Ответов 27
Метки нет (Все метки)

Как бы это поле реализовать? При передаче экземпляра значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться, в остальных случаях требуется генеринг нового уникального значения при каждом создании нового экземпляра. Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2014, 08:56     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Посмотрите здесь:

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

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

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

Создать экземпляр структуры шаблонного класс - C++
Добрый день. У меня возникла проблема при создании шаблонного класса с структурой. Вот код, проблема в 37 строке: using namespace std; ...

Заменить каждый элемент массива Хк значением f(Xk)+ff(Xk+1), кроме последнего - C++
Для обработки одномерного массива X составьте функцию P. Функция P рассматривает элементы массива Х от начала, заменяет каждый элемент Хк...

Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать? - C++
Как сделать что бы void modif() изменял значение поля hours для обьекта st2. Есть 3 файла: 1.h 2.cpp main.cpp 1.h class...

В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением - C++
В прямоугольной матрицы каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки в котором...

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

Не по теме:

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

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

Какие "дыры" могут оказаться в реализации такой схемы?
aLarman
641 / 562 / 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
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:54     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #24
соответственно везде где есть копирование передавать объект std::ref(Ваш класс)
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
14.03.2014, 10:54     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #25
А разве не того же самого хотел ТС? Или я неправильно понял?
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:57     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #26
Цитата Сообщение от CheshireCat Посмотреть сообщение
А разве не того же самого хотел ТС?
при создании экземпляра ему (экземпляру) новый UID давать) создавать можно как конструктором так и конструктором копирования, сделать генерацию нового UID там вроде бы логично, но есть проблема с конструктором копирования, он еще может использовать при передаче по значени, где не надо генерить новый UID
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 с гарантированно уникальным значением
Еще ссылки по теме:

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

Имеет ли смысл использовать класс так? - C++
Здравствуйте. Недавно увидел код, вот упрощенный вариант: class someClass { public: static bool someFn( int, int ); static...

Число представляется массивом, каждый элемент которого – цифра - C++
Задание: Создайте абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран....

Сформировать массив, каждый член которого определяется формулой - C++
Сформировать массив X(N) , N-й член которого определяется формулой X(N)=1/N! С помощью: возвращения объекта из функции? Помогите...

Сформировать массив U каждый элемент которого вычисляется по правилу - C++
Добрый день. Есть массивы X,Y и Z одинаковой длины n. Сформировать массив U каждый элемент которого равен U(i)=X(i)+Y(i)-Z(i). Вот...


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

Или воспользуйтесь поиском по форуму:
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 с гарантированно уникальным значением
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru