C++ 什么';创建指向另一个类的指针数组的语法是什么?
如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么下面的语法正确吗C++ 什么';创建指向另一个类的指针数组的语法是什么?,c++,arrays,pointers,C++,Arrays,Pointers,如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么下面的语法正确吗 class MyClass { private: int arraySize; SomeOtherClass* classPtr[]; } 稍后,当我想在MyClass中的一个函数中为这个数组动态分配内存,该函数接受ifstream、从文件读取并填充数组时,我会这样做吗 void createArray(std::ifstream& fin) { //t
class MyClass
{
private:
int arraySize;
SomeOtherClass* classPtr[];
}
稍后,当我想在MyClass中的一个函数中为这个数组动态分配内存,该函数接受ifstream、从文件读取并填充数组时,我会这样做吗
void createArray(std::ifstream& fin)
{
//the first int is the array size
fin >> arraySize;
string tempString; //the file is formatted string int string int etc.
int tempInt;
classPtr[arraySize];
for(int i = 0; i < arraySize; i++)
{
fin >> tempString;
fin >> tempInt;
//assume the constructor is defined
classPtr[i] = new SomeOtherClass(tempString, tempInt);
}
void createArray(std::ifstream&fin)
{
//第一个int是数组大小
fin>>排列;
string tempString;//文件的格式为string int等。
int-tempInt;
classPtr[arraySize];
for(int i=0;i>临时字符串;
fin>>tempInt;
//假设构造函数已定义
classPtr[i]=新的SomeOtherClass(tempString,tempInt);
}
谢谢你的时间。
这是错误的。你不能在C++ +/p>中使用可变长度数组。 那应该是
SomeOtherClass**classPtr;
在createArray()中
是的,忘记我说的一切,使用std::vector
数组在编译时必须有一个静态大小,但在您的情况下,只有在运行时从流中读取它时,您才知道大小。对于动态大小的数组,您应该使用vector
:
std::vector<SomeOtherClass*> classPtr;
也就是说,在向量中使用原始指针是不可取的,应该小心操作。阅读以了解更多关于它的信息以及它是否适合您。更有可能的是,您只需要对象的向量
:
std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));
std::向量向量向量机;
.....
向量推回(其他类(…);
当使用对象的向量时,您应该确保考虑对象的移动/复制语义,并确保它适合您的用例。您似乎不需要数组,为什么需要数组?简单的回答是,因为这是赋值要求的。classPtr应该跟踪多个实例SomeOtherClass的ces。虽然其中没有拼写数组的内容……但您永远无法创建指向类的指针。这可能是一个糟糕的赋值。它表示“创建另一个维护SomeOtherClass实例的私有数组的类”。“您将动态地将数组分配为精确大小,然后通过读取文件来填充它。”拥有一个对象向量需要考虑在推回过程中移动/复制对象,以及向量是否需要改变容量。唯一ptr向量可能更好。@beldaz引用的链接提供了大量替代向量
指针的选项,因此我不想重复这个答案。我将为thinkin添加一个注释g关于移动/复制。
classPtr.reserve(arraySize);
.....
classPtr.push_back(new SomeOtherClass(...));
std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));