我在使用C ++数组时掌握一些概念时遇到了一些麻烦。
在我的任务中,我做了类似下面的代码。据我所知,这不仅为[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];
}
如果Object1的构造函数已经接受了一个参数,就像在下面的代码中一样,那么在堆栈和堆上会发生什么不同,如果有的话?我没有向object1的每个实例发送任何参数,所以它是否仍然初始化任何对象,或者只是创建空间?
class Object1
{
Private:
int dummy;
Public:
Object1(int myInt);
};
Object1::Object1(int myInt)
{
dummy = myInt;
}
我也看到了下面的代码。在这种情况下发生了什么,它与上述情况有何不同?
myclass *array[10];
for (int i = 0 ; i != 10 ; i++) {
array[i] = new myclass();
}
我已完成作业,但我只是想确保了解幕后发生的事情。
提前感谢您抽出宝贵时间提供帮助!
答案 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个指针。每个指针只指向一个动态分配的对象。