我在父类(假定为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。
请问这是为什么呢??

解决方案 »

  1.   

    把vector定义为protected,private只有基类中才有,派生类中不会继承基类的私有成员变量
      

  2.   

    在父类的构造函数中对此动态数组进行初始化
    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);
       }
     }