复制构造函数定义并声明差异

Copy constructor define and declare difference?

本文关键字:声明 构造函数 定义 复制      更新时间:2023-10-16

我有一个基类和派生类。

  1. 如果我在类中声明了一个复制构造函数,编译器会在编译时定义复制构造函数吗
  2. 如果调用派生类复制构造函数,会发生什么?它依赖于基类复制构造函数吗

(在标准编译过程中,我需要知道基类和派生的复制构造函数之间的关系。编译器定义复制构造函数是什么以及如何定义的)

如果我在类中声明了一个复制构造函数,编译器会在编译时定义复制构造函数吗

没有。不会的。

如果你只是声明了复制构造函数而没有定义它,那么你最终会出现一个链接错误。通过为副本构造函数提供显式声明,您可以告诉编译器隐式生成的声明不足以满足您的需求,并承诺您将提供自己的版本。但如果你不提供定义,你就违背了承诺。

如果调用派生类复制构造函数会发生什么?它依赖于基类复制构造函数吗

基类中是否存在复制构造函数不会影响派生类中的复制构造函数。规则很简单:
若并没有提供显式声明,编译器会为类生成一个复制构造函数。请注意,只有当您的代码使用复制构造函数时,编译器才会这样做。如果编译器检测到您的代码从未使用过复制构造函数,那么它将不会生成复制构造函数,因为这是一个不需要的开销,并违反了C++的基本规则,"您只为使用的东西付费"