У меня есть небольшой пример шаблона проектирования Factory
, и я заинтересован в этой части:
std::make_unique< A >(*this)
... особенно *this
.
Означает ли это, что метод clone()
возвращает std::unique_ptr
, который указывает на член класса фабрики?И createInstance()
всегда возвращает один и тот же член класса Factory
?
Я просто запутался в том, что std::make_unique< A >(*this)
должен делать, потому что A
имеет в конструкторе std::string
, а не указатель на себя.
class Base {
public:
virtual ~Base() {}
virtual std::unique_ptr<Base> clone() = 0;
virtual void print() = 0;
};
class A: public Base {
std::string name_;
public:
A(std::string name ){name_ = name;};
std::unique_ptr<Base> clone() override{
return std::make_unique<A>(*this);
};
void print( ) override{
std::cout << "Class A: " << name_;
};
virtual ~A(){};
};
class Factory{
std::unique_ptr<A> type = std::make_unique<A>("MyName");
public:
std::unique_ptr<Base> createInstance(){
return type->clone();
}
};
int main(){
Factory factory;
auto instance = factory.createInstance();
instance->print();
}