2014-03-06 129 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

是的,你是對的,我忘了回答這個問題。我聽說過虛擬功能。我在回答中忘記了他們。我的錯。 :) –