我在父类(假定为A类)中定义了一个vector。
typedef std::vector<void*> VArray, FAR *LPVArray;
...
private:
VArray FMemTbl; //内存表在父类的构造函数中对此动态数组进行初始化
A::A(const int iMaxPageSize)
{
...
vector<void*> FMemTbl(iMaxPageSize, NULL);
}我又定义了一个B类,继承自A类。
B类的构造函数是这样定义的:class B: public A
{
public:
B(const int iMaxPageSize = 1024):A(iMaxPageSize){}
...
};现在我定义了一个B类的对象
B* pB = new B(1024);但是我发现在pB的动态数组FMemTbl的size为0。我单步跟踪后发现在A类中FMemTbl的size的确为1024。
请问这是为什么呢??
typedef std::vector<void*> VArray, FAR *LPVArray;
...
private:
VArray FMemTbl; //内存表在父类的构造函数中对此动态数组进行初始化
A::A(const int iMaxPageSize)
{
...
vector<void*> FMemTbl(iMaxPageSize, NULL);
}我又定义了一个B类,继承自A类。
B类的构造函数是这样定义的:class B: public A
{
public:
B(const int iMaxPageSize = 1024):A(iMaxPageSize){}
...
};现在我定义了一个B类的对象
B* pB = new B(1024);但是我发现在pB的动态数组FMemTbl的size为0。我单步跟踪后发现在A类中FMemTbl的size的确为1024。
请问这是为什么呢??
A::A(const int iMaxPageSize)
{
...
vector<void*> FMemTbl(iMaxPageSize, NULL);
}这不是初始化,而是重新定义了一个构造函数中暂时的局部FMemTbl,构造函数函数运行结束就消失了。
而A中的FMemTbl没有初始化。这样试试:A::A(const int iMaxPageSize)
{
FMemTbl.reserve(iMaxPageSize);
for(int i=0;i<iMaxPageSize;i++)
{
FMemTbl.pushback(NULL);
}
}