我想知道是否可以创建一个对象数组,当对象需要为构造函数传递东西时。我想要这样的东西:
MyClass *myVar;
myVar = new MyClass[num]; // I would like to specify the array size after declaration
int i = 0;
for(i = 0;i < num;i++)
myVar[i] = new MyClass(0,0); // I would also like to populate the array with new objects
字符串
我知道这是可行的:
MyClass *myVar;
myVar = new MyClass[num];
型
但这只在构造函数没有传入任何东西的情况下才有效。我试图做的是可能的吗?如果是,我该怎么做?
编辑:我发现了如何使用数组来实现它。下面是我是如何做到的:
MyClass **myVar;
myVar = new MyClass *[num];
for(i = 0;i < num;i++)
myVar[0] = new MyClass(0,0);
型
我会使用向量之类的,但我的老师告诉我们尽可能使用基本的数组。上面的解决方案实际上是从我的老师写的一些代码中得到的。谢谢大家的帮助!
6条答案
按热度按时间klr1opcd1#
字符串
实际上,在这种形式下,你不能调用带参数的构造函数。这是语言规范所不允许的。
但是,如果你使用
std::vector
,我推荐你使用,那么你可以创建一个vector调用非默认构造函数:型
它创建了一个
num
元素的向量,每个元素都是通过调用类的复制构造函数来创建的,并将MyClass(10,20)
作为参数传递给它。vector也很好,因为现在你不需要自己管理内存。既不需要手动分配,也不需要手动释放。另外,你可以随时通过调用
arr.size()
来知道元素的数量。你总是知道vector包含多少元素。你也可以随时添加元素,只需调用.push_back()
成员函数:型
现在你可以访问元素,就像访问数组一样,即通过使用index:
型
此外,您可以使用迭代器来促进惯用编程,使您能够使用来自
<algorithm>
头部的各种算法函数:型
其中
f
是一个函数,它接受一个MyClass&
(或MyClass const &
)类型的参数,这取决于你想在f
中做什么。在C++11中,你可以使用lambda:
型
7uzetpgm2#
在C++0x中,这个语法可以工作,它可以在new表达式中调用非默认构造函数:
字符串
但我怀疑当元素的数量只在运行时可用时它是否有效。
矢量方法会更好,正如Nawaz的回答所示。
gmol16393#
指针到指针的指针等价于:
vector<T*>
指针向量。我过去使用的一种方法是使用双指针。这种方法消除了向量数据结构的开销,并且需要更好的内存效率。
字符串
几乎可以与任何你能想象到的控制结构一起工作。
缺点是内存分配不连续,可能会影响大量
num
s的速度。aurhwmvo4#
你也可以这样做:
字符串
2skhul335#
实际上,你可以使用一个placement new来处理这个问题:
字符串
mctunoxg6#
@Nawaz answer在使用vector方面非常好,但对我不起作用,因为它创建了相同对象的vector(所有对象都引用同一个对象)
字符串