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

Паттерн "Одиночка" и конструктор копии с оператором присваивания - C++

Восстановить пароль Регистрация
 
ruslan_abel
 Аватар для ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
06.11.2011, 18:11     Паттерн "Одиночка" и конструктор копии с оператором присваивания #1
Здравствуйте!
Подскажите пожалуйста с вопросом.
Мне необходимо реализовать паттерн "Одиночка". Необходимо ли перегружать конструктор копии и оператор присваивания для одиночки, что бы исключить возможность создания копии объекта? Я объявил деструктор класса в секции protected. Поэтому, например такая попытка создании копии одиночки:
C++
1
2
Trash tr = *( Trash::Instance() ); // Trash - класс одиночки 
//Trash::Instance() возвращает указатель Trash*
Заканчивается ошибкой компиляции.
error: 'virtual Trash::~Trash()' is protected
Будет ли этого достаточно, что бы гарантировать невозможность создания копии объекта?
Здесь, например, одиночка наследуется от boost::noncopyable(с помощью которого запрещается копирование объекта). Действительно ли необходимо так делать? Или это лишнее?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
06.11.2011, 18:24     Паттерн "Одиночка" и конструктор копии с оператором присваивания #2
а что препятсвует созданию объекта с помощью обычного new?
ruslan_abel
 Аватар для ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
06.11.2011, 18:26  [ТС]     Паттерн "Одиночка" и конструктор копии с оператором присваивания #3
Конструктор в protected
Bers
Заблокирован
06.11.2011, 18:31     Паттерн "Одиночка" и конструктор копии с оператором присваивания #4
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Действительно ли необходимо так делать? Или это лишнее?
Если над запретить возможность копирования - запрещаем. Если не над - не запрещаем. Ваш К.О.
ruslan_abel
 Аватар для ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
06.11.2011, 18:34  [ТС]     Паттерн "Одиночка" и конструктор копии с оператором присваивания #5
Ясно.
Спасибо. Просто я думал что можно и без этого обойтись.
Bers
Заблокирован
06.11.2011, 18:38     Паттерн "Одиночка" и конструктор копии с оператором присваивания #6
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Спасибо. Просто я думал что можно и без этого обойтись.
Ты подумай, зачем тебе вообще одиночка понадобился?
Если над гарантировать 100% что объект будит создан только в ед. экземпляре, то зачем такому одиночке вообще могут быть нужны копирующие конструкторы?

А все что не нужно, должно быть запрещено. Что бы даже соблазна никакого никогда не возникало. И ругалось матом на стадии компиляции, а не в рантайме.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
06.11.2011, 19:13     Паттерн "Одиночка" и конструктор копии с оператором присваивания #7
Нужно сделать закрытыми конструктор, конструктор копирования и operator=().
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.11.2011, 19:17     Паттерн "Одиночка" и конструктор копии с оператором присваивания #8
смотря как одиночка организован, одиночкам копирования могут быть не страшны
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 09:06     Паттерн "Одиночка" и конструктор копии с оператором присваивания
Еще ссылки по теме:

C++ Паттерн "Шаблонный метод"
C++ Игра "Жизнь"; Нужно, чтобы первое поколение задавалось оператором (с клавиатуры)
C++ Компилятор визуаль студио 2008 с++,выскакивает ошибка с оператором вывода "<< "

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

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.11.2011, 09:06     Паттерн "Одиночка" и конструктор копии с оператором присваивания #9
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Здесь, например, одиночка наследуется от boost::noncopyable(с помощью которого запрещается копирование объекта). Действительно ли необходимо так делать? Или это лишнее?
чтобы предотвратить копирование - делают конструктор копирования и оператор присваивания закрытыми и опускают определение.

При таком подходе если случайно вызвать эти методы, будет ошибка на этапе компоновки, а чтобы ошибку переместить на этап компиляции для этого класс унаследовали от базового.
Yandex
Объявления
07.11.2011, 09:06     Паттерн "Одиночка" и конструктор копии с оператором присваивания
Ответ Создать тему
Опции темы

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