首页 > 解决方案 > 如何实例化对象并让它们在其范围之外仍然可用?(例如在循环中实例化一个对象)

问题描述

我正在尝试编写一个程序,该程序接受用户输入并使用它来创建对象,然后将其推送到列表中。这是我所写内容的简化版本:

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++scope

解决方案


在此处阅读 C++ 的范围: https ://en.cppreference.com/w/cpp/language/scope

为什么要引用在 for 循环中创建的对象?它们已经被复制到 list<> 对象中,因此您可以在那里读取/修改它们。


推荐阅读