make_unique 中 this* 的用法

Usage of this* in make_unique

我有一个Factory设计模式的小例子,我对这部分很感兴趣:

std::make_unique< A >(*this)

...尤其是 *this

是否意味着 clone() 方法 return a std::unique_ptr 指向工厂 class 的成员? 和 createInstance() 总是 return 是 Factory class 的同一个成员?

我只是对 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();
}

std::make_unique<A>(*this) 基本上等同于:

unique_ptr<A>(new A(*this))

clone() 中,*this 是对 A 的左值引用,因此您正在从(左值引用)[=15] 构造 A =] (在 std::make_unique 内),因此您正在使用 A:

的隐式声明的复制构造函数
A(A const&);

因此,您实际上是在将当前对象复制到新分配的内存块中。

由于 createInstance 使用 clone(),您每次调用 createInstance.

时都会创建一个 type 的 "copy"