是否有任何方法可以避免跨类的不同构造函数进行代码复制

Is there any way to avoid code replication across different constructors of a class?

本文关键字:构造函数 复制 代码 任何 方法 可以避免 是否      更新时间:2023-10-16

有什么方法可以避免跨类的不同构造函数进行代码复制吗?

class sample
{
    int a, b;
    char *c;
public:
    sample(int q) :
      a(0),
      b(0), 
      c(new char [10 * q])
    {
    }
    sample() :
      a(0),
      b(0),
      c(new char [10])
    {
    }
}

它被称为委托构造函数。在你的情况下,它看起来像这样:

sample(int q) : sample(q, 10 * q)
{
}
sample() : sample(0, 10)
{
}
sample(int q, int d) : a(q),
   b(q), 
   c(new char [d])
{
}

如果没有C++11,则可以使用专用void init(...)函数。请注意,不能以这种方式初始化const-refs。

我建议您使用类内初始化。

class sample
{
    int a = 0;
    int b = 0;
    char *c;
public:
    sample(int q) : c(new char [10 * q]) {}
    sample() : c(new char [10]) {}
}