Если я не хочу разрешать кому-либо создавать экземпляр моего класса, кроме моих статических функций (я думаю, что это называется singleton/factory?), Достаточно ли сделать конструктор по умолчанию закрытым, или мне также нужно явно определить и сделать частным конструктор копирования и оператор присваивания?C++ private constructors
ответ
Да, я бы сделал все 3 из этих функций менеджера. Если нет, вы не хотите иметь доступ к конструктору копирования. Например, это справедливо:
Singleton * s;
Singleton copy(*s);
Так что-то вроде:
class Singleton
{
private:
Singleton();
Singleton(const Singleton &);
Singleton & operator = (const Singleton &);
};
Да, обычно вам нужно. Если нет, вы можете построить новый экземпляр:
MyClass newObject = your_singleton_of_type_MyClass;
В этом случае выдается экземпляр копии, создавая на самом деле два объекта. Создание закрытого конструктора копии предотвращает копирование, делая этот код незаконным.
Если вам нужен только один экземпляр, то да, конструктор копирования должен быть закрытым. Оператор присваивания не должен иметь значения, потому что его будет невозможно использовать в любом случае.
Заставить constuctor секретна для шаблона метода фабрики. Для одноэлементного шаблона необходим заводской метод.
Усиление неготовности, если вы не хотите, чтобы ваш класс был скопирован, но, как уже прокомментировал Джеймс Макнеллис, решите, должны ли пользователи копировать класс. Поскольку исходные указатели и встроенное управление памятью больше не должны иметь места в классах, вопрос о копировании классов в основном предназначен для классов, которые используют ресурсы или, возможно, большие контейнеры.
- 1. C++ Inheritance and Constructors
- 2. Chaining Constructors
- 3. C# 7 Expression Bodied Constructors
- 4. Может ли C++ Constructors быть шаблоном?
- 5. Java Constructors
- 6. Doxygen - Objective-C - Функции класса Private Private
- 7. java multiple constructors
- 8. enum constructors (создание членов группы)
- 9. Cython - copy constructors
- 10. Java (toString and Constructors)
- 11. Objective-C static "constructors" - мне нужно сохранить?
- 12. C++ Inheritance With No Default Constructors
- 13. Objective C static vs. dynamic constructors
- 14. java generic constructors
- 15. public/private in C++
- 16. C# private method boolean
- 17. C#: IComparable реализация private
- 18. C++ private variable confusion
- 19. C++ атрибуты private access
- 20. Genericizing Constructors in Scala
- 21. DDD + Public Constructors Constructors - должны ли они существовать?
- 22. constexpr default default constructors
- 23. Ошибка Java - Inheritance & Constructors
- 24. ByteBuffer.allocate in Constructors
- 25. Mocking constructors in Ruby
- 26. Copy Constructors ... A Quandary
- 27. Confused о java constructors
- 28. Generics and Parameterized Constructors
- 29. STL Map Value Constructors
- 30. Static Imports and Constructors
Это зависит от многого. хотите ли вы, чтобы потребители класса могли копировать экземпляры, возвращаемые вашей статической функцией? –
нет, хочу всего один экземпляр globaly – baruch
@baruch: Так что сделайте только один. – GManNickG