【问题标题】:is there better or correct way to use objects with vector in c++?有没有更好或更正确的方法在 C++ 中使用带有向量的对象?
【发布时间】:2016-01-29 07:24:58
【问题描述】:

我有这样的课:

class Foo{
public:
   Foo(); 
   Foo(int, int, int)
  ~Foo();
private:    
   int a;
   int b;
   int c;
}

和 int main 函数并喜欢将我的元素(对象)保存在向量中:

int main()
{
   vector <Foo*> foo; // <------this line
   for(int i=0; i<=500; i++){
   foo.push_back(new Foo(i+1,i+2; i+3)); //<------ this line 
}

有没有更好的解决方案来替换上面的 2 行?

tnx 全部;

【问题讨论】:

  • 你为什么在向量中使用指针?
  • 只需使用std::vector&lt;Foo&gt;。谁告诉你需要指针的?
  • 如果可能的话,我会避免使用指针,而是使用简单的对象。拥有一个动态分配对象的向量闻起来很像内存泄漏,因为忘记释放是很常见的。至少使用智能指针
  • @πάνταῥεῖ 和 BoBTFish 和 Sossenbinder 我更喜欢在堆中创建我的对象。我在 statck 内存中使用我的对象的 500 个或更多对象是这样吗??
  • @mehdi std::vector 无论如何都会将对象放在“堆”中。

标签: c++ class pointers object vector


【解决方案1】:

你需要忘掉你一直在写“新”来创建一个对象的 Java 东西。

int main()
{
   vector<Foo> foo;
   for(int i=0; i<=500; i++)
       foo.push_back(Foo(i+1, i+2, i+3));
}

或者,在 C++11 中,

int main()
{
   vector<Foo> foo;
   for(int i=0; i<=500; i++)
       foo.emplace_back(i+1, i+2, i+3);
}

【讨论】:

  • tnx,对象是在堆中创建还是在statck中创建?
  • @mehdi foo 是一个具有自动存储功能的对象。它的元素在免费商店中。通常将它们分别称为“堆栈”和“堆”,即使它们是实现细节并且在 C++ 中不存在。
  • @molbdnilo:它很受欢迎,因为它们是大多数平台上最常见的实现。
猜你喜欢
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2013-10-17
  • 2017-03-12
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多