在编译时,它会返回master_instance_type
,就像在使用删除功能sme error
一样,返回添加对象的结果。
constexpr Player::Player(const Player&)
在编译时,它会返回master_instance_type
,就像在使用删除功能sme error
一样,返回添加对象的结果。
constexpr Player::Player(const Player&)
根据C ++ 17标准(12.8复制和移动类对象)
7如果类定义未明确声明副本 构造函数,一个隐式声明。如果类定义 声明移动构造函数或移动赋值运算符, 隐式声明的副本构造函数定义为Delete;除此以外, 它定义为默认值(8.4)。 以下情况不建议使用: 该类具有用户声明的副本分配运算符或 用户声明的析构函数。
还将移动构造函数定义为已删除,至少是因为明确定义了副本分配运算符。
因此,您需要显式定义operator +
形成返回对象所需的副本构造函数。
请注意,类定义还有其他缺点。例如,数据成员name
可以等于nullptr
。默认构造函数允许这样做。在这种情况下,由于该语句,cppy赋值运算符可以调用未定义的行为
this->name = new char[strlen(temp.name) + 1];
^^^^^^^^^^^^^^^^^
并且字符串文字具有常量字符数组的类型。因此,默认构造函数的第一个参数应声明为类型const char *
。