C++ 成员数组未初始化

c++ member array not initialized

本文关键字:初始化 数组 成员 C++      更新时间:2023-10-16

我有以下星座:

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保持0x0,稍后当我尝试使用_b时会发生错误。

这是怎么回事?

更新:

该问题是由Windows/Linux跨平台问题引起的 - 值填充了不正确的指针。

首先:

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

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

这应该可以解决问题。

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