有没有办法避免跨类的不同构造函数进行代码复制?

时间:2016-07-28 11:00:20

标签: c++ c++11

有没有办法避免跨类的不同构造函数进行代码复制?

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])
    {
    }
}

3 个答案:

答案 0 :(得分:9)

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

sample(int q) : sample(q, 10 * q)
{
}

sample() : sample(0, 10)
{
}

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

答案 1 :(得分:2)

如果您拥有C ++ 11,您可以使用私有void init(...)功能。请注意,您不能以这种方式初始化const引用。

答案 2 :(得分:1)

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

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