2015-11-10 156 views
0

我允許執行以下操作嗎? 用派生類對象數組初始化基類指針? gnu g ++它達到刪除語句時崩潰...使用派生類對象數組初始化基類指針

任何建議嗎?我是否必須重載新的[]和刪除操作符?

謝謝!

#include <iostream> 

    using std::endl; 
    using std::cout; 
    using std::cin; 

    // base class --> Base 

    class Base { 
    public: 

    // constructor 

    Base() { 
     cout << " --> constructor --> Base" << endl; 
    } 

    // destructor 

    virtual ~Base() { 
     cout << " --> destructor --> ~Base" << endl; 
    } 
}; 

// derived class --> D1 

class D1 : virtual public Base { 
public: 

// constructor 

D1() : Base(), x1(10) { 
     cout << " --> constructor --> D1" << endl; 
} 

// destructor 

virtual ~D1() { 
     cout << " --> destructor --> ~D1" << endl; 
} 

private: 

int x1; 
}; 

// the main program 

int main() 
{ 
    const int DIM = 100; 
    Base * pb2 = new D1 [DIM]; 
    delete [] pb2; 

    return 0; 
} 

回答

1

這是行不通的 - C數組不知道多態類型的動態大小。如果你想使用多態,那麼你必須使用指向基類型的指針(最好是智能指針)的數組(最好是std::vector或另一個標準數組,而不是C數組)。

+1

請注意,這已經在這裏得到解答:http://stackoverflow.com/questions/7196172/can-a-pointer-to-base-point-to-an-array-of-derived-objects?rq=1 – sfjac

+0

謝謝!我會嘗試! – paulsepolia

相關問題