派生类'复制构造函数(C++)初始化列表的基类

Jān*_*ris 1 c++ oop derived copy-constructor inherited

举个例子:

class Base {
  Base (const Base & copyFrom) { globalRegister (* this); }
}

class Derived {
  Derived (const Derived & copyFrom) : Base (copyFrom) {}
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了建议,在Baseived的初始化列表中包含Base的复制构造函数,以便复制Base的属性(如示例中所示).

但是,我有Base的复制构造函数将自身(*this)传递给其他对象(要向该对象注册).这是否真的必须在Derived的复制构造函数的初始化列表中使用(隐式或显式)Base(默认)构造函数,并且只在Derived的复制构造函数的主体中调用Base的复制构造函数,当实际存在对象时可以通过Base的复制构造函数附加吗?否则 - (*this)是一个有效的对象?

sbi*_*sbi 5

这是否真的必须在Derived的复制构造函数的初始化列表中使用(隐式或显式)Base(默认)构造函数,并且只在Derived的复制构造函数的主体中调用Base的复制构造函数,当实际存在对象时可以通过Base的复制构造函数附加吗?

为什么你想要这样做呢?
(哦,你不能从派生类的构造函数体中调用基类的复制构造函数.只能从它的初始化列表中调用.)

否则 - (*this)是一个有效的对象?

基础初始化列表完成的那一刻,所有基础成员(和基类)都是完全构造的.但是,类本身只在构造函数完成时才完全构造.
更重要的是,派生类的构造函数尚未启动,因此该对象尚未成为派生类的对象.

因此无论注册函数做什么,它都必须考虑对象的动态类型,base并且它的构造函数还没有完成.(为了安全起见,它所能做的就是将对象的地址存储在某个地方.)