繁体   English   中英

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

[英]Why does copy constructor call other class' default constructor?

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

no matching function for call to 'Foo::Foo()'

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

我什至不知道需要考虑构造函数。 如果代码显示类似

bar = thing.bar; //

并且bar是Foo类型,具有上述规格,难道它不只是生成一个浅表副本并用它完成吗? 为什么需要调用默认构造函数?

如果未定义构造函数,则编译器将生成默认构造函数,但是,如果您确实定义了构造函数(如副本构造函数),则编译器将不会生成默认构造函数,因此您也需要定义该构造函数。

听起来您已经定义了复制构造函数而未定义任何其他构造函数。

明确声明构造函数后,编译器将不再为您提供默认的构造函数。 因此,首先您将不再具有构造该类的对象的机制(因此将无法复制该对象)。

如您所说,如果您正在做“

bar = thing.bar;

它大概位于类的副本ctor的主体中-因此,首先使用其类的默认ctor初始化bar字段,然后将该类的赋值运算符用于此语句。 如果bar的类仅具有复制ctor,没有默认ctor,则需要类的复制ctor开头{ 之前添加bar(thing.bar)子句, 然后删除该赋值(无论如何通常是一个好主意,但在“没有默认ctor”条件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM