C++ 如何使用";=“违约”;使用具有主体的构造函数?

C++ 如何使用";=“违约”;使用具有主体的构造函数?,c++,constructor,default,C++,Constructor,Default,假设我有一个类,它有两个成员变量。例如,在复制构造函数中,我想复制所有成员并做更多的工作。如何告诉编译器拥有默认行为(复制成员变量)并执行函数体中的操作,而不是显式复制成员变量 大概是这样的: class X { public: // This constructor should copy all the members // and also do what's inside the constructor's body. X(const X& x)

假设我有一个类,它有两个成员变量。例如,在复制构造函数中,我想复制所有成员并做更多的工作。如何告诉编译器拥有默认行为(复制成员变量)并执行函数体中的操作,而不是显式复制成员变量

大概是这样的:

class X
{
public:

    // This constructor should copy all the members
    // and also do what's inside the constructor's body.   
    X(const X& x) = default
    {
        // Do some work.
    }
};

从构造的角度来看,这没有多大意义,因为构造函数的任务是设置成员数据,而不是其他

但是,如果您需要这种模式,例如为了注册对象,一种解决方案是

class Y : public X
{
    Y(const Y&){
        // Do some work
    }
    // No member data here 
};

如果你已经为它写了一个主体,它就不再是默认的构造函数了。这是一个恼人的问题,尽管C++,它可以非常方便地能够做一个默认的副本和一点点额外。我建议的最佳解决方法是在基类中使用默认构造函数,然后在继承它的类的构造函数中执行额外的工作