#include <iostream>
class A {
public:
A(int d) : y(d) {}
int y;
};
int main(void) {
A d[3] = {A(0), A(1), A(2)};
std::cout << d[1].y << std::endl;
};
我正在为大学做一个项目。我被指示不要使用对象数组并用我的类的临时对象实例化每个元素 - 所以像上面的代码这样的东西是不可以的。相反,建议我们使用类型数组,A*然后在每个元素上使用 new,以便我们创建一个对象并使每个元素指向它。
所以我们会有这样的事情:
A* d[3];
for (int i=0;i<3;i++)
d[i]=new A(i);
但是,与第一个版本相比,我不太了解实践中的差异。据我了解,在第一个版本中,我们使用构造函数创建了三个临时对象(它们是右值),然后将它们分配给数组。赋值结束后,临时对象被销毁,其值被复制到数组中。在第二个版本中,我们的优点是可以删除d[]指向的内容,但忽略这一点,使用第一种方法的缺点是什么?
编辑:
class B{
public:
A a1[3];
}
假设我的初始定义后面跟着这个(A 不是默认可构造的,这样的事情是不可能的吗?所以在这种情况下,我不能使用对象数组,而是不得不求助于类型的指针数组,A*然后使用new,作为我唯一的度假胜地。