如果您在运行时不知道对象的数量,则需要在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;
如果您在类中使用此功能,则将delete放在类的析构函数中非常重要:
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对象数组将被清理。
std::vector
,而数组和指针则推迟到第569页。他的大学课程也是按照这种方式结构化的。 - fredoverflowstd::vector<>
进行教学可能会感到陌生,但是有很多语言中string
只是一个不可挑战的黑匣子。我用这种方式教授C++已经多年了,并取得了很大的成功。 - sbi