Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

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

Студворк — интернет-сервис помощи студентам
Как бы это поле реализовать? При передаче экземпляра значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться, в остальных случаях требуется генеринг нового уникального значения при каждом создании нового экземпляра. Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2014, 08:56
Ответы с готовыми решениями:

Как создать список, каждый элемент которого имеет свое поле приоритета?
Задание: Организовать связный список каждый элемент которого имеет поле приоритета.Данные вытягивают со списка в соответствии к приоритету....

Выборка записей с уникальным значением в одном поле LINQ to SQL
Здравствуйте! Есть таблица "Услуги", с которой нужно вывести уникальные значения "Тип" и любые "idУслуги" (в базе...

Экземпляр класс имя которого храниться в строке
Всем привет. Скажите как можна создать екземпляр класса имя которого храниться в string-е. и вызвать метод имя которого храниться тоже в...

27
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
14.03.2014, 10:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от aLarman Посмотреть сообщение
mustimur, это шедееевр

Не по теме:

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

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

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

Добавлено через 3 минуты
Кстати, есть такая штука в boost или 11 с++ как ref() этот объект копировать можно, но он не копирует то, на что создана ссылка, если не хотите юзать boost или нет 11 с++, то можно самому описать этот класс
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
14.03.2014, 10:54
соответственно везде где есть копирование передавать объект std::ref(Ваш класс)
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
14.03.2014, 10:54
А разве не того же самого хотел ТС? Или я неправильно понял?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
14.03.2014, 10:57
Цитата Сообщение от CheshireCat Посмотреть сообщение
А разве не того же самого хотел ТС?
при создании экземпляра ему (экземпляру) новый UID давать) создавать можно как конструктором так и конструктором копирования, сделать генерацию нового UID там вроде бы логично, но есть проблема с конструктором копирования, он еще может использовать при передаче по значени, где не надо генерить новый UID
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 11:19  [ТС]
Цитата Сообщение от mustimur Посмотреть сообщение
Так этого объекта нет уже, так зачем занимать его UId?
Затем, что UID - это параметр функции-члена контейнерного класса, осуществляющей поиск, возвращающей индекс найденного элемента, а если объект уже удалён, то она должна вернуть
C++
1
std::numeric_limits<size_t>::max()
, что будет признаком ошибки. А теперь представь, что до попытки поиска UID удалённого объекта оказался занят новым объектом. Что она вернёт? Правильно, индекс этого нового объекта, сообщения же об ошибке не будет.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
14.03.2014, 17:15
Цитата Сообщение от taras atavin Посмотреть сообщение
А теперь представь, что до попытки поиска UID удалённого объекта оказался занят новым объектом. Что она вернёт? Правильно, индекс этого нового объекта, сообщения же об ошибке не будет
Да понял я это, я просто искал простое решение, тем паче, что в первой теме таких пояснений нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2014, 17:15
Помогаю со студенческими работами здесь

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

Сколько методов имеет каждый класс в этом коде?
Подскажите пожалуйста, сколько методов имеет каждый класс в этом коде. using System; using System.Collections.Generic; using...

Нужен класс, метод которого бы создавал кнопку и помещал ее на ту форму, где вызывается его экземпляр
Всегда создавал кнопки таким методом: public Button _but; public int kolvo=0; this._but = new Button; this._but = new Button(); ...

Вывод записей из БД с уникальным значением
Здравствуйте, есть одна идея, но не знаю, как реализовать! Есть таблица, допустим table, с какими-то полями, одна из которых name, порядок...

Как выбрать данные с уникальным значением поля
Приветствую. Необходимо решить следующую задачу: Нужно выбрать из базы список полей заданной таблицы и информацию о внешних ключах этих...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru