C ++中的递归构造函数

时间:2014-08-16 19:39:34

标签: c++ constructor default-constructor

我构建了一个包含没有默认构造函数的向量的类。具体做法是:

template<typename T>
struct MyVector
{
public:
  int GetN(void)
  {
    return n;
  }
  MyVector(int n1)
  {
    n=n1;
    ListElt = new T[n1];
  }
  ~MyVector()
  {
    delete [] ListElt;
  }
  // some other irrelevant to the question code
private:
  int n;
  T *ListElt;
};

现在我想构建一个派生自它的类,它包含一个整数和一个向量。 有效的代码如下:

struct EquivInfo {
public:
  EquivInfo(int inpOrbit, MyVector<int> &inpMat)
  {
    iOrbit=inpOrbit;
    eVect=new MyVector<int>(inpMat.getN());
    // some code for copying the vector in place.
  }
  ~EquivInfo()
  {
    delete eVect;
  }
private:
  int iOrbit;
  MyVector<int> *eVect;
};

有没有办法避免使用向量的指针?

问题是,如果我删除指针,则会调用 MyVector()类型的构造函数。我不懂为什么。应该有一种方法可以让EquivInfo的构造函数为 MyVector

调用精确的构造函数

我可以添加一个构造函数 MyVector(),即将向量设置为微不足道的默认构造函数。但确切地说,我想避免使用这种构造函数,以便所有向量都被很好地定义并且代码是干净的。使用指针可以让我有一个合理的情况,但我想知道是否有一种干净的方法来避免它。

1 个答案:

答案 0 :(得分:5)

使用member initializer list

class EquivInfo {
 public:
  EquivInfo(int inpOrbit, MyVector<int> &inpMat) 
    : eVect(inpMat.getN())
    , iOrbit(inpOrbit) {
    // some code for copying the vector in place.
   }

   // ....

   MyVector<int> eVect;
}