小编wss*_*one的帖子

为什么 std::make_unique<A>(*this) 可以调用 A 的隐式声明的复制构造函数

源问题来自Usage of this* in make_unique

代码如下,最佳答案是:

在 中clone()*this是对 的左值引用,因此您正在从 (对的左值引用) (在 内部)A构造 a ,因此您正在使用 的隐式声明的复制构造函数:AAstd::make_uniqueA

A(A const&);
Run Code Online (Sandbox Code Playgroud)

我很困惑类A有一个虚拟析构函数virtual ~A(){},编译器将不再生成复制构造函数。那么为什么std::make_unique<A>(*this)可以调用 的隐式声明的复制构造函数呢A

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{ …
Run Code Online (Sandbox Code Playgroud)

c++ constructor implicit

0
推荐指数
1
解决办法
149
查看次数

标签 统计

c++ ×1

constructor ×1

implicit ×1