我构建了一个包含没有默认构造函数的向量的类。具体做法是:
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(),即将向量设置为微不足道的默认构造函数。但确切地说,我想避免使用这种构造函数,以便所有向量都被很好地定义并且代码是干净的。使用指针可以让我有一个合理的情况,但我想知道是否有一种干净的方法来避免它。
答案 0 :(得分:5)
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;
}