4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
1 | |
Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением14.03.2014, 08:56. Показов 2392. Ответов 27
Метки нет (Все метки)
Как бы это поле реализовать? При передаче экземпляра значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться, в остальных случаях требуется генеринг нового уникального значения при каждом создании нового экземпляра. Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
0
|
14.03.2014, 08:56 | |
Ответы с готовыми решениями:
27
Как создать список, каждый элемент которого имеет свое поле приоритета? Выборка записей с уникальным значением в одном поле LINQ to SQL Экземпляр класс имя которого храниться в строке Написать класс, от которого можно получить только один экземпляр класса |
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 09:10 | 2 |
cтатическая переменная котораяю будет плюсоваться в реализации конструктора
правда тогда будет проблема с конструктором копирования, он может использоваться во время копирования аргументов ф-ции, а так же при инициализации нового экземпляра уже существующим экземпляром....
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 09:21 [ТС] | 3 |
1. Как лучше решить эту проблему?
2. Есть ли ещё "подводные камни"? А если так: при инициализации конструктором копирования копируется всё, включая UID, но после этого первая и только первая модификация любого поля меняет UID? Назначение класса таково, что существование полностью идентичных (даже за вычетом UID) экземпляров лишено смыла. Желательно конечно реализовать заявленное в стартовом посте, но на задачу-минимум пойдёт и вариант "положиться на то, что все остальные копии быстро перестанут быть таковыми". Добавлено через 47 секунд Какой разрядности? , так что декларировать её типа size_t и успокоиться тем, что раньше будет исчерпана память, чем переполнится счётчик, нельзя: удалённые экземпляры память не занимают, а в количество в такой постановке идут.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 09:31 | 4 |
эм....size_t это тайпдеф unsigned int, там 4 миллиарда значений, Вы в курсе что человек живет в среднем 2 миллиарда секунд?
Добавлено через 4 минуты это конечно перебор, но например запретить его, во всех ф-циях передавать строго по ссылкам...
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 09:37 [ТС] | 5 |
А Вы в курсе, что за одну секунду можно выполнить более миллиона, а то и миллиарда операций? Так что создать, удалить и снова создать можно успеть и пару триллионов объектов. Менее, чем за сутки.
Добавлено через 3 минуты 1. Что это даст? Ссылка то как раз не мешает, ведь копирование то не происходит, а происходит только заворачивание в синтаксис ссылки указателя, по которому находятся те же данные, а значит и неизменённый UID. 2. Как раз передача по ссылкам должна быть основным синтаксисом передачи параметров.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 09:38 | 6 |
ну это понятно, просто объекты будут так быстро генериться? или Вы не знаете как быстро, кстати в 11 стандарт включили long long я думаю там немного побольше значений
Добавлено через 1 минуту ну и хорошо, тогда конструктор копии запретите (в приват или если 11 стандарт "= delete") и увеличивайте значение только при создании (т.е конструктор)
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 09:44 [ТС] | 7 |
В том и дело, что заранее я этого не знаю.
Добавлено через 43 секунды Подозреваю, что версия компилятора об это не догадывается. Добавлено через 2 минуты А как тогда передать параметр-экземпляр по значению? И как вернуть экземпляр в виде значения функции/оператора?
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 09:53 | 8 |
Вы же вроде хотите передавать только по сслыкам
если это ф-ции и операторы принадлежащие классу, они смогут воспользоваться ими, и при возвращении по значению наверное не надо увеличивать UID вы же внутри ф-ции\оператора будете создавать новый экземпляр Добавлено через 2 минуты Вобщем получается так, 1) не вызывать конструктор копии для инициализации - тогда в конструкторе копии не инкрментить UID конструктор копии оставить открытым и использовать если надо в ф-циях, 2) запретить конструктор копии (что бы нельзя было в принципе инициализировать объекты этим конструктором) тогда им смогут воспользваться только ф-ции члены и френды Добавлено через 1 минуту от сюда следуют некоторое ограничения, в 1) не понятно как явно запретить использование конструктора копии при инициализации (вроде таких механизмов нет, или я просто их не знаю) 2) сами понимаете, нельзя будет копировать
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 10:00 [ТС] | 9 |
. Где здесь только по ссылкам?
Добавлено через 1 минуту . В каком месте здесь встречается слово "член"? Добавлено через 1 минуту Оператором присваивания можно.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 10:03 | 10 |
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
14.03.2014, 10:05 | 12 |
а когда этот уникальный идентификатор увеличивать, что бы различне экземпляры имели уникальные значения?
0
|
14.03.2014, 10:16 | 14 |
Когда ТС нужно пусть тогда и увеличивает. Примеров кода я не увидел так, что моя совесть чиста
Как я понял из условиия необходимо просто запретить копирование, а если быть точнее следует написать свой конструктор копий и следить за тем как передается объект. По ссылке все Ок, по значению конструктор копий. В чем вообще проблема?
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||||||
14.03.2014, 10:27 | 16 | |||||
в том что конструктор копии использвуется в нескольких контекстах, например
а Если объект удалить, а при посл созданиях новй экземпляр попадет в эту же ячейку?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 10:34 [ТС] | 18 |
0
|
aLarman
|
14.03.2014, 10:35
#19
|
Не по теме: mustimur, это шедееевр
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2014, 10:37 [ТС] | 20 |
0
|
14.03.2014, 10:37 | |
14.03.2014, 10:37 | |
Помогаю со студенческими работами здесь
20
Сколько методов имеет каждый класс в этом коде? Нужен класс, метод которого бы создавал кнопку и помещал ее на ту форму, где вызывается его экземпляр Вывод записей из БД с уникальным значением Как выбрать данные с уникальным значением поля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |