为什么复制构造函数调用其他类的默认构造函数?

Ano*_*ous 1 c++ copy-constructor

我想知道为什么会发生这样的错误.

no matching function for call to 'Foo::Foo()'
Run Code Online (Sandbox Code Playgroud)

在代码中为复制构造函数?假设Foo只是一个具有普通字段的对象(没有动态分配的内存等),它定义的唯一构造函数是一个带有一个参数的构造函数.

我甚至不知道构造函数需要考虑.如果代码说的话

bar = thing.bar; //
Run Code Online (Sandbox Code Playgroud)

和bar是Foo类型,具有上面描述的规格,它不应该只生成一个浅的副本并用它完成吗?为什么需要调用默认构造函数?

Joh*_*don 8

如果您没有定义构造函数,编译器将生成默认构造函数,但是如果您确实定义了构造函数(就像复制构造函数一样),编译器将不会生成默认构造函数,因此您还需要定义该构造函数.