创建指向另一个类的指针数组的语法是什么?

时间:2013-02-13 02:40:14

标签: c++ arrays pointers

如果我有一个带有私有变量的类,它应该包含指向另一个类的指针数组,那么以下语法是否正确?

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);
    }

感谢您的提前时间。

2 个答案:

答案 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个对象时,您应该确保考虑对象的移动/复制语义,并确保它适合您的用例。