【问题标题】:How to use " = default" with a constructor that has a body?如何将“= default”与具有主体的构造函数一起使用?
【发布时间】:2020-04-17 06:58:51
【问题描述】:

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

类似这样的:

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.
    }
};

【问题讨论】:

  • 如果你为它写了一个body,它就不再是一个默认的构造函数了。这是 C++ 的一个烦人的问题,如果能够做一个默认的副本 一点点额外的话会非常方便。我可以建议的最佳解决方法是在基类中使用默认构造函数,然后在继承自它的类的构造函数中做额外的工作

标签: c++ constructor default


【解决方案1】:

从构造的角度来看,这没有多大意义,因为构造函数的工作是设置成员数据,仅此而已。

但是,如果您需要这种模式,例如以某种方式注册对象,一种解决方案是拥有

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

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多