【问题标题】:How do I instantiate objects and have them still be available outside of their scope? (e.g. instantiated an object in a loop)如何实例化对象并让它们在其范围之外仍然可用? (例如,在循环中实例化一个对象)
【发布时间】:2021-03-25 20:28:03
【问题描述】:

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

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 的多个实例,我该如何清除内存?

谢谢

【问题讨论】:

  • 你写的“简化版”看起来应该没问题。仅仅因为object 超出范围并不意味着添加到objectList 的副本确实如此。第一个版本到底有什么问题?

标签: c++ scope


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多