繁体   English   中英

动态分配指向对象的指针数组

[英]Dynamically allocating an array of pointers to objects

问题:

我有一个名为 croba 的croba 在我的控制台应用程序中,我有一个菜单,我可以在其中选择不同的选项。 在我选择一个选项后,一个 switch 语句会检查我的输入并执行我选择的块。

在其中一种情况下,我希望程序动态分配指向未知大小的 class 对象的指针数组(要求用户输入数组的大小),问题是用户输入和数组必须被分配在“case”块中,但分配的数组必须稍后在代码中全局访问。 我在全局范围内声明了一个指向 object 的指针,如下所示:

croba *arrayOfObjectsPtr = NULL;

这是“案例”块:

case 3:{
            int numberOfElements;
            int indexNumber;
            if(!arrayOfObjectsPtr){
                do{
                    cout << endl << "How many linked lists? "; cin >> numberOfElements;
                }while(numberOfElements < 1);
                croba *arrayOfObjectsPtrLocal[numberOfElements];
                for (int i = 0; i < numberOfElements; i++){
                    arrayOfObjectsPtrLocal[i] = new croba;
                }
            }else{
                cout << endl << "The array is already alocated!" << endl;
            }
            arrayOfObjectsPtr = arrayOfObjectsPtrLocal;
            break;
        }

我试图弄清楚是否有一种方法可以声明一个指向指向 class 对象的指针数组的指针,然后在以后分配它(因为之前不知道元素的数量)。

在 C++ 中,最佳实践是使用std::vector ,即标准库的动态数组 class 。 它比 C 风格的 arrays 好用得多。 在您的情况下,它看起来像这样: std::vector<croba *> arrayOfObjectsPtr 不过要小心,因为您必须在销毁之前手动删除向量中的指针,如下所示:

for (auto& obj : arrayOfObjectsPtr)
    delete obj;

如果您不想像上面那样手动执行清理,请使用智能指针向量,例如std::unique_ptr

如果您仍然想使用旧的 C 样式数组(不推荐),那么这样声明它: croba** arrayOfObjectsPtr = new croba*[numberOfElements] 至于清理,你必须这样做:

for (int i = 0; i < numberOfElements; ++i)
    delete arrayOfObjectsPtr[i];
delete[] arrayOfObjectsPtr;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM