我想创建一个类的多个对象,但这个数字在运行时才会知道。 Intuition告诉我,我应该使用以下循环来创建我的对象:
for (int count = 0; count < no_of_objects; count ++)
{
ClassName object_name[count]
}
然而,这不起作用,因为编译器似乎不喜欢使用变量作为对象名称。有没有办法可以使用循环创建这些对象,或者我是否必须使用其他方法。
请记住,我没有长时间使用C ++并且最近才被引入编程,所以我对语言的了解有限 - 到目前为止,数组是我教过的唯一数据结构 - 没有载体等等。
答案 0 :(得分:6)
是学习载体的时候了:
std::vector<ClassName> objects (no_of_objects);
现在使用对象[0]到对象[no_of_objects - 1];请注意,objects.size()等于no_of_objects。当你准备好了,看看vector的方法等,但是现在,这个加上知道要包含的标题(&lt; vector&gt;)就足以将对象用作动态数组。
答案 1 :(得分:2)
在C ++中,如果在运行时之前不知道对象的数量,则必须动态分配它。你需要类似的代码:
ClassName* pmyClasses = new ClassName[no_of_objects];
这将分配一个数组来保存您的类对象,然后您需要初始化它们。
for (int i=0; i < no_of_objects; i++)
{
pmyClasses[i] = new ClassName();
}
然后,您可以通过数组索引器访问它们:
for (int i=0; i < no_of_objects; i++)
{
pmyClasses[i].SomeFunction();
}
这里需要注意的一件重要事情是,如果使用new
来分配内存,则需要使用delete
来解除分配。由于这是一个数组声明,因此您需要使用delete []
运算符。
for (int i=0; i < no_of_objects; i++)
{
delete pmyClasses[i];
}
delete [] pmyClasses;
如果你在里面或类中使用它,那么在类的析构函数中删除是很重要的:
class UsingMyClass
{
private:
ClassName* pmyClasses;
public:
UsingMyClass(int no_of_objects)
{
pmyClasses = new ClassName[no_of_objects];
for (int i=0; i < no_of_objects; i++)
{
pmyClasses[i] = new ClassName();
}
}
~UsingMyClass()
{
for (int i=0; i < no_of_objects; i++)
{
delete pmyClasses[i];
}
delete [] pmyClasses;
}
}
通过这样做,当UsingMyClass对象超出范围时(假设它不是通过调用new
或malloc
创建的),那么将清理ClassName对象的数组。
答案 2 :(得分:0)
如果您的类具有默认构造函数(并且您希望默认构造实例),则可以使用数组new
,即new ClassName[some_number]
- 类型为ClassName*
)。< / p>
如果它没有默认构造函数,你可以使用展示位置new
,或者手动使用指针数组new
。
答案 3 :(得分:0)
要动态分配内存,您必须使用new
关键字
ClassName = new object_name[count];
并确保使用delete
关键字