【问题标题】:C++ Initializing an Array of ObjectsC++ 初始化对象数组
【发布时间】:2017-02-18 09:15:26
【问题描述】:

我在掌握 C++ 数组的一些概念时遇到了一些困难。

  1. 在我的任务中,我做了类似下面的代码。据我所知,这不仅在堆上为 [size] Object1 对象创建了空间,而且还初始化了所有对象。有人可以在这里解释堆和堆栈上到底发生了什么吗?

    class Object1
    {
      Private:
        int dummy;
      Public:
        Object1();
    };
    
    Object1::Object1()
    {
      dummy = 1;
    }
    
    class Foo
    {
      private:
        Object1 * myObject;
    
      public:
        Foo(int size);
    };
    
    Foo::Foo(int size)
    {
      myObject = new Object1[size];
    }
    
  2. 如果 Object1 的构造函数采用了参数,如下面的代码所示,那么堆栈和堆上会发生什么不同(如果有的话)?我没有向 object1 的每个实例发送任何参数,所以它仍然会初始化任何对象,还是只是创建空间?

    class Object1
    {
      Private:
        int dummy;
      Public:
        Object1(int myInt);
    };
    
    Object1::Object1(int myInt)
    {
      dummy = myInt;
    }
    
  3. 我还在某处看到了下面的代码。在这种情况下发生了什么,它与上述情况有何不同?

    myclass *array[10];
    for (int i = 0 ; i != 10 ; i++) {
        array[i] = new myclass();
    }
    

我已经完成了任务,但我只是想确保我了解幕后发生的事情。

提前感谢您抽出时间提供帮助!

【问题讨论】:

    标签: c++ arrays object heap-memory


    【解决方案1】:

    如果你的类没有默认构造函数,你将无法使用:

    myObject = new Object1[size];
    

    两者的区别

    myObject = new Object1[size];
    

    myclass *array[10];
    for (int i = 0 ; i != 10 ; i++) {
        array[i] = new myclass();
    }
    

    第一个分配size对象并将指向对象数组的指针存储在myObject中。

    第二个分配了 10 个对象但有 10 个指针。每个指针只指向一个动态分配的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2018-06-22
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多