当元素在类中不存在时,如何实现复制构造函数?

时间:2011-12-08 10:34:12

标签: c++ copy-constructor

例如,您的构造函数可能如下所示:

myClass::myClass(Mesh &mesh) : baseClass(mesh) 
{
    pointer = new Thing(mesh);
}

网格没有保存在myClass中,也没有在baseClass中保存网格的getter。这只是必须在基类中实现getter的情况吗?

例如你不能这样做:

myClass::myClass(const myClass& original) : baseClass(mesh) //there is no mesh
{
    pointer = new Thing(mesh); //mesh is no longer in the parameter list
} 

编译器在为这些类创建默认复制构造函数时如何制作此副本?或者这是一个需要复制构造函数的情况?网格不是大脑的私人成员,并且没有吸气剂,所以我们如何制作新的东西?

编辑 - 通过添加Thing

更新了问题

3 个答案:

答案 0 :(得分:6)

必须在mesh复制构造函数中复制

baseClass

class baseClass
{
  Mesh myMesh;
public:
  baseClass(const baseClass &other) : myMesh(other.myMesh) {} // <--- copy Mesh
};

class myClass : public baseClass
{
public:
  myClass(const myClass& other) : baseClass(other) {} // <--- simply pass
};

答案 1 :(得分:3)

每个班级都必须照顾自己的复制品。

myClass的默认复制构造函数将简单地为基类(以及每个其他成员)调用复制构造函数。

答案 2 :(得分:1)

大麻复制构造函数将是:

MyClass::MyClass( MyClass const& other )
    :  BaseClass( other )
{
}

BaseClass的复制构造函数将采用const引用 BaseClassother会隐式转换。复制构造函数 然后BaseClass会做任何必要的事情。

这是隐式生成的构造函数,因此您不必这样做 提供它,只要您对生成的其他方面感到满意 构造函数:公共和内联。