不考虑default关键字一定生成的场合.
我问gpt得到的回复是,比方说,在没有拷贝构造函数的情况下.
"没有显式定义移动构造函数,移动赋值函数,析构函数"的情况下会自动生成.
这是测试用的类.
class Base
{
public:
int x;
Base():x(0){
cout<<"default constru"<<endl;
}
Base(int x):x(x){
cout<<"constru"<<endl;
}
};
这是测试用的代码.
int main()
{
Base b1{1};
Base b2{b1};//调用拷贝构造.
b1=b2;//调用拷贝赋值
return 0;
}
但,我经过测试,发现,只给Base类添加移动构造/移动赋值函数的定义的话,它确实不会自己生成拷贝构造函数了.
但如果添加定义析构函数的显式定义的话,它实际上是会生成一个默认拷贝构造函数的.
这是怎么回事呢?
有自定义析构函数情况,现阶段会生成拷贝构造。
但是这一行为已经在标准中被标记为 deprecated (在现阶段的 c++26 draft 中依然如此),可能在未来就会规定为 deleted 。
https://timsong-cpp.github.io/cppwp/n4868/class.copy.ctor#6
https://timsong-cpp.github.io/cppwp/n4868/class.copy.assign#2