Это объявление массива (и, вероятно, он должен быть закрытым)
Stooge* Factory::s_prototypes[] = {
nullptr, new Larry, new Moe, new Curly
};
Обратите внимание, что я заменил 0 на nullptr.Инициализируется экземплярами объектов.
clone () должен сделать копию объекта.Что не так в вашем случае.Вместо прототипа вы создали простую фабрику.это не обязательный метод в вашем конкретном случае, потому что вы можете реализовать его как конструктор копирования для Curly
(также Мо и Ларри).
Он используется, когда тип создаваемых объектов определяетсяпрототипный экземпляр, который клонируется для создания новых объектов.Этот шаблон используется для:
Шаблон прототипа используется для
- избегания подклассов создателя объекта в клиентском приложении, как это делает шаблон фабричного метода.
- избегайте затрат, связанных с созданием нового объекта стандартным способом (например, с использованием ключевого слова 'new'), когда это слишком дорого для данного приложения.
В C ++ обычное содержимое ConcreteProtoType::clone()
Метод будет
return new ConcreteProtoType(*this);
Иногда с некоторым дополнительным кодом, необходимым для создания нового экземпляра по архитектуре.(Вызов методов инициализации? Новое выражение будет помещением нового с использованием пула памяти? Некоторое действие, которое мы не можем сделать в конструкторе, как вызов виртуального метода?)
Это требует определения конструктора копирования, еслиобъект не может быть скопирован (если это возможно, почему мы используем прототип?)