[英]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.