【问题标题】:initialize a base class pointer with an array of derived class objects用派生类对象数组初始化基类指针
【发布时间】:2015-11-10 13:52:23
【问题描述】:

我可以执行以下操作吗? 用派生类对象数组初始化基类指针? 到达删除语句时,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;
 }

【问题讨论】:

    标签: c++ class pointers virtual destructor


    【解决方案1】:

    这不起作用 - C 数组不知道多态类型的动态大小。如果要使用多态性,则必须使用指向基类型的指针(最好是智能指针)的数组(最好是 std::vector 或其他标准数组,而不是 C 数组)。

    【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 2014-06-16
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2021-07-02
    相关资源
    最近更新 更多