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)是一个有效的对象?
这是否真的必须在Derived的复制构造函数的初始化列表中使用(隐式或显式)Base(默认)构造函数,并且只在Derived的复制构造函数的主体中调用Base的复制构造函数,当实际存在对象时可以通过Base的复制构造函数附加吗?
为什么你想要这样做呢?
(哦,你不能从派生类的构造函数体中调用基类的复制构造函数.只能从它的初始化列表中调用.)
否则 - (*this)是一个有效的对象?
基础初始化列表完成的那一刻,所有基础成员(和基类)都是完全构造的.但是,类本身只在构造函数完成时才完全构造.
更重要的是,派生类的构造函数尚未启动,因此该对象尚未成为派生类的对象.
因此无论注册函数做什么,它都必须考虑对象的动态类型,base并且它的构造函数还没有完成.(为了安全起见,它所能做的就是将对象的地址存储在某个地方.)