C ++初始化对象数组

时间:2016-10-10 00:49:01

标签: c++ arrays object heap

我在使用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();
    }
    
  4. 我已完成作业,但我只是想确保了解幕后发生的事情。

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

1 个答案:

答案 0 :(得分:0)

如果您的班级没有默认构造函数,您将无法使用:

if let userData = message["message1"] as? [String:String] {
    let username = userData["username"]
    print(username) //output: "Guest User"

    let titleItem = userData["titleItem"]
    print(titleItem)
}

之间的区别
myObject = new Object1[size];

myObject = new Object1[size];

第一个分配myclass *array[10]; for (int i = 0 ; i != 10 ; i++) { array[i] = new myclass(); } 个对象并将指针存储到size中的对象数组。

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