Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 09:10     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #2
cтатическая переменная котораяю будет плюсоваться в реализации конструктора
правда тогда будет проблема с конструктором копирования, он может использоваться во время копирования аргументов ф-ции, а так же при инициализации нового экземпляра уже существующим экземпляром....
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 09:21  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #3
Цитата Сообщение от aLarman Посмотреть сообщение
правда тогда будет проблема с конструктором копирования, он может использоваться во время копирования аргументов ф-ции, а так же при инициализации нового экземпляра уже существующим экземпляром....
1. Как лучше решить эту проблему?
2. Есть ли ещё "подводные камни"?
А если так: при инициализации конструктором копирования копируется всё, включая UID, но после этого первая и только первая модификация любого поля меняет UID? Назначение класса таково, что существование полностью идентичных (даже за вычетом UID) экземпляров лишено смыла. Желательно конечно реализовать заявленное в стартовом посте, но на задачу-минимум пойдёт и вариант "положиться на то, что все остальные копии быстро перестанут быть таковыми".

Добавлено через 47 секунд
Цитата Сообщение от aLarman Посмотреть сообщение
cтатическая переменная... будет плюсоваться в реализации конструктора
Какой разрядности?
Цитата Сообщение от taras atavin Посмотреть сообщение
Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
, так что декларировать её типа size_t и успокоиться тем, что раньше будет исчерпана память, чем переполнится счётчик, нельзя: удалённые экземпляры память не занимают, а в количество в такой постановке идут.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 09:31     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #4
эм....size_t это тайпдеф unsigned int, там 4 миллиарда значений, Вы в курсе что человек живет в среднем 2 миллиарда секунд?

Добавлено через 4 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
1. Как лучше решить эту проблему?
это конечно перебор, но например запретить его, во всех ф-циях передавать строго по ссылкам...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 09:37  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #5
Цитата Сообщение от aLarman Посмотреть сообщение
эм....size_t это тайпдеф unsigned int, там 4 миллиарда значений, Вы в курсе что человек живет в среднем 2 миллиарда секунд?
А Вы в курсе, что за одну секунду можно выполнить более миллиона, а то и миллиарда операций? Так что создать, удалить и снова создать можно успеть и пару триллионов объектов. Менее, чем за сутки.

Добавлено через 3 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
это конечно перебор, но например запретить его, во всех ф-циях передавать строго по ссылкам...
1. Что это даст? Ссылка то как раз не мешает, ведь копирование то не происходит, а происходит только заворачивание в синтаксис ссылки указателя, по которому находятся те же данные, а значит и неизменённый UID.
2. Как раз передача по ссылкам должна быть основным синтаксисом передачи параметров.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 09:38     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #6
Цитата Сообщение от taras atavin Посмотреть сообщение
Так что создать, удалить и снова создать можно и пару триллионов объектов.
ну это понятно, просто объекты будут так быстро генериться? или Вы не знаете как быстро, кстати в 11 стандарт включили long long я думаю там немного побольше значений

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
2. Как раз передача по ссылкам должна быть основным синтаксисом передачи параметров.
ну и хорошо, тогда конструктор копии запретите (в приват или если 11 стандарт "= delete") и увеличивайте значение только при создании (т.е конструктор)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 09:44  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #7
Цитата Сообщение от aLarman Посмотреть сообщение
ну это понятно, просто объекты будут так быстро генериться? или Вы не знаете как быстро,
В том и дело, что заранее я этого не знаю.

Добавлено через 43 секунды
Цитата Сообщение от aLarman Посмотреть сообщение
кстати в 11 стандарт включили long long
Подозреваю, что версия компилятора об это не догадывается.

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
ну и хорошо, тогда конструктор копии запретите (в приват или если 11 стандарт "= delete") и увеличивайте значение только при создании (т.е конструктор)
А как тогда передать параметр-экземпляр по значению? И как вернуть экземпляр в виде значения функции/оператора?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 09:53     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #8
Цитата Сообщение от taras atavin Посмотреть сообщение
А как тогда передать параметр-экземпляр по значению?
Цитата Сообщение от taras atavin Посмотреть сообщение
2. Как раз передача по ссылкам должна быть основным синтаксисом передачи параметров.
Вы же вроде хотите передавать только по сслыкам
Цитата Сообщение от taras atavin Посмотреть сообщение
И как вернуть экземпляр в виде значения функции/оператора?
если это ф-ции и операторы принадлежащие классу, они смогут воспользоваться ими, и при возвращении по значению наверное не надо увеличивать UID вы же внутри ф-ции\оператора будете создавать новый экземпляр

Добавлено через 2 минуты
Вобщем получается так, 1) не вызывать конструктор копии для инициализации - тогда в конструкторе копии не инкрментить UID
конструктор копии оставить открытым и использовать если надо в ф-циях,
2) запретить конструктор копии (что бы нельзя было в принципе инициализировать объекты этим конструктором) тогда им смогут воспользваться только ф-ции члены и френды

Добавлено через 1 минуту
от сюда следуют некоторое ограничения, в 1) не понятно как явно запретить использование конструктора копии при инициализации (вроде таких механизмов нет, или я просто их не знаю)
2) сами понимаете, нельзя будет копировать
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 10:00  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #9
Цитата Сообщение от aLarman Посмотреть сообщение
Вы же вроде хотите передавать только по сслыкам
Цитата Сообщение от taras atavin Посмотреть сообщение
При передаче экземпляра по значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться,
. Где здесь только по ссылкам?

Добавлено через 1 минуту
Цитата Сообщение от aLarman Посмотреть сообщение
если это ф-ции и операторы принадлежащие классу, они смогут воспользоваться ими, и при возвращении по значению наверное не надо увеличивать UID вы же внутри ф-ции\оператора будете создавать новый экземпляр
Цитата Сообщение от taras atavin Посмотреть сообщение
При передаче экземпляра по значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого объекта, в том числе, объекта-массива значение UID должно копироваться, в остальных случаях требуется генеринг нового уникального значения при каждом создании нового экземпляра. Требется гарантировать, что ни одно значение UID не совпадёт со значением UID ни какого другого, даже удалённого экземляра.
. В каком месте здесь встречается слово "член"?

Добавлено через 1 минуту
Цитата Сообщение от aLarman Посмотреть сообщение
2) сами понимаете, нельзя будет копировать
Оператором присваивания можно.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:03     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Оператором присваивания можно.
угу из ф-ции по значению вернуть...сомневаюсь...
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 10:03     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Паттерн Singleton вам в помощь. Используйте его как индетификатор UID и всего делов.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:05     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #12
Цитата Сообщение от Ilot Посмотреть сообщение
Используйте его как индетификатор UID и всего делов.
а когда этот уникальный идентификатор увеличивать, что бы различне экземпляры имели уникальные значения?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
14.03.2014, 10:15     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #13
Я нельзя в качестве этого идентификатора использовать адрес первой ячейки памяти, где он хранится?
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 10:16     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #14
Цитата Сообщение от aLarman Посмотреть сообщение
а когда этот уникальный идентификатор увеличивать, что бы различне экземпляры имели уникальные значения?
Когда ТС нужно пусть тогда и увеличивает. Примеров кода я не увидел так, что моя совесть чиста
Как я понял из условиия необходимо просто запретить копирование, а если быть точнее следует написать свой конструктор копий и следить за тем как передается объект. По ссылке все Ок, по значению конструктор копий. В чем вообще проблема?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
14.03.2014, 10:16     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #15
Генерируется в конструктор
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 10:27     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #16
Цитата Сообщение от Ilot Посмотреть сообщение
В чем вообще проблема?
в том что конструктор копии использвуется в нескольких контекстах, например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{};
 
 
func(A obj)
{
 
}
 
A object;
A object2 = object;//констр копир
A object3(object2);//констр копир тут новый объект следовательно новый UID нужен
 
func(object)//тут тоже копирование тут поидее генерить новый UID не надо
Добавлено через 54 секунды
Цитата Сообщение от mustimur Посмотреть сообщение
первой ячейки памяти, где он хранится?
а Если объект удалить, а при посл созданиях новй экземпляр попадет в эту же ячейку?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
14.03.2014, 10:33     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #17
Цитата Сообщение от aLarman Посмотреть сообщение
а Если объект удалить
Так этого объекта нет уже, так зачем занимать его UId?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 10:34  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #18
Цитата Сообщение от Ilot Посмотреть сообщение
Паттерн Singleton вам в помощь. Используйте его как индетификатор UID и всего делов.
В каком месте у меня требование существование единственного экземпляра?
aLarman
14.03.2014, 10:35
  #19

Не по теме:

mustimur, это шедееевр

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 10:37     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 10:37  [ТС]     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением #20
Цитата Сообщение от mustimur Посмотреть сообщение
Я нельзя в качестве этого идентификатора использовать адрес первой ячейки памяти, где он хранится?
Нельзя.

Добавлено через 1 минуту
Цитата Сообщение от aLarman Посмотреть сообщение
угу из ф-ции по значению вернуть...сомневаюсь...
Хорошо, что напомнил.
Yandex
Объявления
14.03.2014, 10:37     Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением
Ответ Создать тему
Опции темы

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