c++ - 动态分配指向对象的指针数组
问题描述
问题:
我有一堂课叫croba
. 在我的控制台应用程序中,我有一个菜单,我可以在其中选择不同的选项。在我选择一个选项后,一个 switch 语句会检查我的输入并执行我选择的块。
在其中一种情况下,我希望程序动态分配指向未知大小的类对象的指针数组(要求用户输入数组的大小),问题是用户输入和数组必须被分配在“case”块中,但分配的数组必须稍后在代码中全局访问。我声明了一个指向全局对象的指针,如下所示:
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;
}
我试图弄清楚是否有一种方法可以声明一个指向全局类对象指针数组的指针,然后稍后再分配它(因为以前不知道元素的数量)。
解决方案
在 C++ 中,最好的做法是使用std::vector
标准库的动态数组类。它比 C 风格的数组好用得多。在您的情况下,它看起来像这样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;
推荐阅读
- google-cloud-platform - 在DataFlow上同步执行数据的处理流程?
- android - 默认浏览器列表
- php - JWT授权属性不起作用php
- node.js - 使用 Node.js 中的 XSLT 字符串将 XML 字符串 [不是文件!] 转换为 HTML
- javascript - 将图像的二进制解码为base64
- r - 如何提取范围内的文本?
- python - 在 pandas.DataFrame 中查找下一个值组的行号
- javascript - 分离()然后附加()
- tsql - 通过更新同一列实现滞后功能
- c++ - 无法从发布者和订阅者节点可视化 Rviz (ROS) 中的 PointCloud