C++ c++;成员数组未初始化

C++ c++;成员数组未初始化,c++,initialization,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*

我有以下星座:

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();
但通过这样做:

derived* instance = new derived();
base* instance = new derived();
_b保持0x0,稍后当我尝试使用_b时会出现错误

这里发生了什么

更新:

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

首先:

为什么需要初始化
a
b
两次?仅使用显式初始化,或仅使用标准成员初始化,而不是两者都使用

derived(size_t num = 1) : a(new unsigned int[num]), 
                          _b(new unsigned char[num])
{
}
这应该能奏效


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

发布一个测试用例,否则它就不会发生。这太奇怪了,令人难以置信。你能发一封信吗?理想情况下,我们可以粘贴到某个对象上,例如,我们自己可以看到它。基类是否有名为_b的数据成员?您应该显示基类定义。首先:这并不能回答问题。第二:“派生类的所有成员和函数都是无用的。除了base的成员和函数,这在两个类中都很常见”-你听说过虚拟函数吗?是的,你是对的,我忘记回答这个问题了。我听说了虚拟函数。我在回答中忘记了它们。我的错。:)