![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
задачка не из жизни, просто интересно, какое лучшее решение придумают:
сделать такой класс, объекты которого нельзя присваивать друг другу нигде в программе (важная часть задачи - даже в функциях-членах самого этого класса). По возможности, чтобы при попытке присвоения получалась ошибка, по которой легко догадаться о ее причине. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Константный объект?
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Если константный способ не подходит, то можно воспользоваться правилом хорошего тона при разработке классов и доступ к переменным предоставлять через публичные методы setVariable()/getVariable(), а там уже хоть "#error Обшибко, низзя так делать!"
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не константный. можно сказать, неклонируемый ну и?
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Перегрузи оператор = в классе и делай что хочешь.
|
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Добавлено через 23 секунды Задача емнип решена в boost.non_copyable -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
делаю я и так, что хочу почти, но в условии задачи была оговорка (нужно было ее жирным выделить) о том, чтобы в классе тоже нельзя было присваивать да, это оно, кажется. надо почаще в буст заглядывать - ато я для решения задачи с шаблонами мучился.... |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Так оно и будет, если не сделать реализации оператора присваивания. Вот только ошибка будет не compile а link time
|
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
для разработки библиотеки (да и любого класса, который будут другие пользовать) link time не подходит - потому не считается |
|||
|
||||
| Dimonius |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 11.10.2006 Репутация: нет Всего: 1 |
А не о синглтоне ли здесь речь?
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
нет
Единый эелемент отличается от Некопируемого |
|||
|
||||
| Dimonius |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 11.10.2006 Репутация: нет Всего: 1 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не оно
|
|||
|
||||
| georain |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Чтобы предотвратить копирование объектов HomeForSale, нужно лишь унаследовать его от Uncopyable:
Effective C++ 3thEd правило 6 Это сообщение отредактировал(а) georain - 24.2.2008, 23:27 |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
От решения, реализованного в boost отличается только именем класса (и тем, что в boost'е это все еще дополнительно завернуто в 2 namespace'а) |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |