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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
#1

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

06.11.2011, 18:11. Просмотров 832. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Подскажите пожалуйста с вопросом.
Мне необходимо реализовать паттерн "Одиночка". Необходимо ли перегружать конструктор копии и оператор присваивания для одиночки, что бы исключить возможность создания копии объекта? Я объявил деструктор класса в секции protected. Поэтому, например такая попытка создании копии одиночки:
C++
1
2
Trash tr = *( Trash::Instance() ); // Trash - класс одиночки 
//Trash::Instance() возвращает указатель Trash*
Заканчивается ошибкой компиляции.
error: 'virtual Trash::~Trash()' is protected
Будет ли этого достаточно, что бы гарантировать невозможность создания копии объекта?
Здесь, например, одиночка наследуется от boost::noncopyable(с помощью которого запрещается копирование объекта). Действительно ли необходимо так делать? Или это лишнее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2011, 18:11     Паттерн "Одиночка" и конструктор копии с оператором присваивания
Посмотрите здесь:

C++ Программа с оператором "if"
C++ Паттерн "Одиночка" и динамическая память
Ошибка с оператором для "==" C++
Курсовая работа "Паттерн Компоновщик. Расчет стоимости оборудования исходя из его составных частей." C++
C++ Не могу разобраться с оператором стрелка "->"
Необходимость перегрузки оператора присваивания "=" C++
Паттерн "Fasade" - это что? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
06.11.2011, 18:24     Паттерн "Одиночка" и конструктор копии с оператором присваивания #2
а что препятсвует созданию объекта с помощью обычного new?
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
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
06.11.2011, 18:34  [ТС]     Паттерн "Одиночка" и конструктор копии с оператором присваивания #5
Ясно.
Спасибо. Просто я думал что можно и без этого обойтись.
Bers
Заблокирован
06.11.2011, 18:38     Паттерн "Одиночка" и конструктор копии с оператором присваивания #6
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Спасибо. Просто я думал что можно и без этого обойтись.
Ты подумай, зачем тебе вообще одиночка понадобился?
Если над гарантировать 100% что объект будит создан только в ед. экземпляре, то зачем такому одиночке вообще могут быть нужны копирующие конструкторы?

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

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

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

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru