可以使用C ++中的变量创建对象吗?

时间:2010-11-24 13:59:07

标签: c++

我想创建一个类的多个对象,但这个数字在运行时才会知道。 Intuition告诉我,我应该使用以下循环来创建我的对象:

for (int count = 0;  count < no_of_objects; count ++)
{
    ClassName object_name[count]
}

然而,这不起作用,因为编译器似乎不喜欢使用变量作为对象名称。有没有办法可以使用循环创建这些对象,或者我是否必须使用其他方法。

请记住,我没有长时间使用C ++并且最近才被引入编程,所以我对语言的了解有限 - 到目前为止,数组是我教过的唯一数据结构 - 没有载体等等。

4 个答案:

答案 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对象超出范围时(假设它不是通过调用newmalloc创建的),那么将清理ClassName对象的数组。

答案 2 :(得分:0)

如果您的类具有默认构造函数(并且您希望默认构造实例),则可以使用数组new,即new ClassName[some_number] - 类型为ClassName*)。< / p>

如果它没有默认构造函数,你可以使用展示位置new,或者手动使用指针数组new

答案 3 :(得分:0)

要动态分配内存,您必须使用new关键字

ClassName = new object_name[count];

并确保使用delete关键字

后取消内存