c++ - 如何实例化对象并让它们在其范围之外仍然可用?(例如在循环中实例化一个对象)
问题描述
我正在尝试编写一个程序,该程序接受用户输入并使用它来创建对象,然后将其推送到列表中。这是我所写内容的简化版本:
int main(){
cout << "How many lists? \n";
int numLists;
cin >> numLists;
list<MyObject> objectList;
for(int i = 0; i < numLists; i++){
cout << "Enter some input for list #" << i << "! \n";
int n = 3;
while(n-- != 0){
int input;
cin >> input;
MyObject object(input);
objectList.push_back(object);
}
//Save the newly created list somewhere
}
//Do something with all the created lists
}
循环完成后,在循环内创建的对象最终超出范围,列表的大小为零。
我开始使用
list<MyObject> *list = new list<MyObject>
...
MyObject *object = new MyObject(input);
...
(*list).push_back(*object);
它似乎工作正常,但我想知道是否有更好的方法来实现这一点。此外,由于我在创建它们的循环之外使用 list 和 MyObject 的多个实例,我该如何清除内存?
谢谢
解决方案
在此处阅读 C++ 的范围: https ://en.cppreference.com/w/cpp/language/scope
为什么要引用在 for 循环中创建的对象?它们已经被复制到 list<> 对象中,因此您可以在那里读取/修改它们。
推荐阅读
- java - Hibernate - 按列分组,收集到列表和限制
- c# - 为什么我的相机使用 lerp 挡在两个位置之间?
- python - NumPy 如何组装一个数组?
- amazon-sqs - 如何使用 MassTransit 通过消息值实现节流?(后端是 SNS/SQS 但很灵活)
- manim - 如何让多个点围绕一个圆圈匀速移动?
- c# - Telerik RadRichTextBox:如何更改代码块中的字体大小?
- python - 为什么使用 sklearn RandomForestRegressor 对多个目标的预测有时总和为 1?
- angular - 带有 Observable 的 Angular 路由器防护在页面刷新后不起作用
- javascript - 为什么我需要在 D3 中为 Tooltip 和 Brush 使用自定义事件?
- javascript - 将大量数据从 API 导入 Contentful?