c++ - 在用户定义的复制构造函数中使用隐式复制构造函数

标签 c++ copy-constructor

我有一个相当大且冗长的类,其中隐式生成的复制构造函数将几乎做完全正确的事情,除了一个特定的字段。

有没有办法编写一个调用隐式版本的用户定义的复制构造函数,然后在末尾添加一两行?或者我是否必须编写一个冗长的(而且无聊且容易出错)用户定义的复制构造函数,它主要复制隐式复制构造函数?

class MySimpleObject
{
private:
   FieldA m_fieldA;
   FieldB m_fieldB;
   [... repeated a lot...]
   SpecialField m_trickyField;

public:
    MySimpleObject(const MySimpleObject& other)
    {
        ImplicitCopyCtor(*this,other); // This is what I want to simplify, instead of copying all the fields by hand.

        m_trickyField.DoCloneSeparately(other.m_trickyField);
    }
};

注意:SpecialField 由第三方库提供,因此我无法重构或修改它。我不知道为什么它没有正确复制,但它没有,我想这是有充分理由的。我喜欢将它包装在一个行为正常的类中的想法。我会调查的。

最佳答案

fundamental theorem of software engineering是你的 friend :

struct MakeSpecialSnowflakeLessSpecial
{
  MakeSpecialSnowflakeLessSpecial(const MakeSpecialSnowflakeLessSpecial& other)
  {
    m_trickyField.DoCloneSeparately(other.m_trickyField);
  }

  SpecialField m_trickyField;
};


class MySimpleObject
{
private:
   FieldA m_fieldA;
   FieldB m_fieldB;
   [... repeated a lot...]
   MakeSpecialSnowflakeLessSpecial m_special;

public:
    MySimpleObject(const MySimpleObject&) = default;
};

关于c++ - 在用户定义的复制构造函数中使用隐式复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089263/

相关文章:

c++ - OpenCV 泛化 vector 积以返回任意大小的矩阵

c++ - 比较运算符 `operator<` 的实现,作为成员函数或外部函数

c++ - 这个按升序打印按行和按列排序的矩阵的程序的零在哪里?

c++ - Visual Studio 2012 中的智能指针错误

c++ - 隐式定义与显式声明的构造函数

c++ - 编写自动分配安全复制函数的正确方法以及为什么? C++

C++ 按值返回

c++ - 使用接受 char 指针的函数调用 pthread_create

c++ - 我们什么时候必须使用复制构造函数?

c++ - 关于拷贝构造