如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么以下语法是否正确?
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);
}
感谢您的提前时间。
答案 0 :(得分:2)
这是不正确的。你还不能在C ++中使用变长数组
那应该是
SomeOtherClass** classPtr;
并在createArray()
...
classPtr = new SomeOtherClass*[arraySize];
...
是的,忘记我说的一切并使用std::vector
答案 1 :(得分:0)
数组在编译时必须具有静态大小,但在您的情况下,在运行时从流中读取它之前,您不知道大小。对于动态大小的数组,您应该使用vector
代替:
std::vector<SomeOtherClass*> classPtr;
然后在下面的代码中:
classPtr.reserve(arraySize);
.....
classPtr.push_back(new SomeOtherClass(...));
这就是说,不建议在向量中使用原始指针并且应该小心处理。阅读this answer以了解有关它的更多信息以及它是否适合您。更有可能的是,您只需要vector
个对象:
std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));
使用vector
个对象时,您应该确保考虑对象的移动/复制语义,并确保它适合您的用例。