【问题标题】:How to create a 'global' instance in C++? [closed]如何在 C++ 中创建“全局”实例? [关闭]
【发布时间】:2018-09-23 04:45:15
【问题描述】:

我要说这个,请告诉我我是对还是错。

  • 如果我在循环中创建一个类的实例,一旦该循环完成,该实例就会被删除。

如何使用循环创建一个类的多个实例?

我可以对变量做一些类似的事情,在堆上创建它们吗?

首先是在堆栈上创建的类吗?

还是其他地方?

如何正确创建一个类的“全局”实例?

我真的很困惑,谢谢你的帮助。

【问题讨论】:

  • 使用 std::vector
  • 请查看书单并阅读一本:stackoverflow.com/questions/388242/…
  • @Sid S 啊,这就是我要找的东西,谢谢!
  • @thisisnotworking4meplshelp 变量的作用域仅限于循环,但使用new 动态创建的对象是永久的,直到您使用delete。当你离开循环体时指针变量被销毁,所以如果你没有将它保存在全局指针中,你就无法访问该对象。
  • 看来你需要读一本好的 C++ 书来学习所有这些基本概念,我们这里不能教。

标签: c++ class instance


【解决方案1】:

你可以:

1- 创建一个全局 vector,其中包含指向您的 object 的指针。
2- 在循环内分配。
3- 在不需要时使用另一个循环或根据需要单独取消分配。

例子:

vector<obj*> v;  

int main(){

    int mysize = 10;

    for(int i=0; i < mysize; i++)  //to allocate on the heap
    {
        v.push_back(new obj) ;
    }

     for(int i=0; i < mysize; i++)  // to deallocate from the heap
    {
        delete v[i];
        v[i] = nullptr;
    }
}

您也可以像这样将对象直接推入向量中:

vector<obj> v;

int main(){
    for(int i=0; i < mysize; i++) {
        v.push_back(obj()) ;
        v[i].print();
    }
}

或者事实上,如果你知道你循环了多少次,你可以简单地按照 Liteness 的建议在一行中完成:

vector<obj> v(mysize);  

【讨论】:

  • 你也可以只推送对象本身而不是指针。
  • 我认为问题中不需要指针。但如果您确实需要使用指针,最好使用std::unique_ptr,而不是手动newingdeleting
  • 或者直接写vector&lt;obj&gt; v(mysize)就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 2018-06-27
  • 2020-10-28
相关资源
最近更新 更多