我试图创建一个永远不会重复的类,因为它的字段中有很多数据.为此,我定义了这样的类:
class Foo {
public:
Foo(int i);
Foo();
Foo(const Foo&) = delete;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试执行以下操作,这会导致编译器错误:
Foo a(2);
Foo b = a;
Run Code Online (Sandbox Code Playgroud)
但无论出于何种原因,这都不包括复制数据的情况.
Foo* array;
array = new Foo[10000];
Foo a(2);
array[1] = a;
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
首先,
Foo a();
Run Code Online (Sandbox Code Playgroud)
不会创建类型的对象Foo.它声明了一个不带参数的函数并返回一个Foo.
假设你有一个类型的对象Foo,
Foo b = a;
Run Code Online (Sandbox Code Playgroud)
调用复制构造函数进行初始化b.但是,当你使用
array[1] = a;
Run Code Online (Sandbox Code Playgroud)
它不使用复制构造函数.这是一项任务操作.delete复制构造函数不是delete复制赋值运算符.因此,最后一行不是错误.