C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C为什么复制构造函数被调用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class A {
public:
    A() {}
    A(const A& a) { cout << "A::A(A&)" << endl; }
};

class B {
public:
    explicit B(A aa) {}
};

int main() {
    A a;
    B b(a);
    return 0;
}

为什么打印“A :: A(A&)”?

什么时候“A”的复制构造函数被称为?如果代码调用了复制构造函数,为什么我可以在不创建编译错误的情况下删除复制构造函数

解决方法

B(A aa)采用A by值,因此当执行B b(a)时,编译器调用复制构造函数A(const A& a)以在B的显式构造函数生成名为aa的A实例.

您可以删除复制构造函数并使其仍然有效的原因是,在您尚未声明移动构造函数的情况下,编译器将为您生成复制构造函数.

注意:编译器生成的复制构造函数通常不足以用于复杂的类,它执行简单的成员智能复制,因此对于复杂元素或动态分配的内存,您应该声明自己的.

大佬总结

以上是大佬教程为你收集整理的C为什么复制构造函数被调用?全部内容,希望文章能够帮你解决C为什么复制构造函数被调用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。