c ++成员数组未初始化

时间:2014-03-06 10:49:40

标签: c++ initialization

我有以下星座:

class base {...};

class derived : public base
{
public:
  unsigned int* a;

  derived(size_t num = 1) : a(0), _b(0)
  {
     a = new unsigned int[num];
     _b = new unsigned char[num];
  }
private:
  unsigned char* _b;
}

这样做很好:

derived* instance = new derived();

但这样做:

base* instance = new derived();
当我尝试使用_b时,

_b保持为0x0并且出现错误。

这里发生了什么?

更新

问题是由Windows / Linux跨平台问题引起的 - 值填充了错误的指针。

1 个答案:

答案 0 :(得分:2)

第一:

为什么需要两次初始化ab?仅使用显式初始化,或仅使用标准成员初始化...

derived(size_t num = 1) : a(new unsigned int[num]), 
                          _b(new unsigned char[num])
{
}

这应该可以解决问题。

第二:如果你在derived中创建base的实例,那么派生的所有成员和函数都将是无用的。除了base的成员和函数,这在两个类中都很常见。