2014-03-06 127 views
0

我有以下星座:C++成员数组未初始化

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的跨平台问题引起的 - 值充满了不正确的指针。

+8

发布测试用例或者它没有发生。 – juanchopanza

+1

这很奇怪,很难相信。你可以发布[SSCCE](http://sscce.org/)吗?理想情况下,我们可以粘贴到例如[ideone](http://ideone.com/)并亲自查看。 – Angew

+0

基类是否有名称为_b的数据成员?你应该显示基类的定义。 –

回答

2

第一:

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

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

这应该可以做到。第二:如果您将derived的实例创建为base,则派生的所有成员和函数都将毫无用处。除了基础的成员和功能,这在两个类中都很常见。

+1

**第一**:这不回答问题。 ** Second **:*“派生的所有成员和函数都是无用的,除了基类的成员和函数,这在两个类中都很常见”* - 您是否听说过* virtual *函数? – SomeWittyUsername

+0

是的,你是对的,我忘了回答这个问题。我听说过虚拟功能。我在回答中忘记了他们。我的错。 :) –