3

从内存管理站点看,对函数中使用的所有临时向量使用一个向量类成员有什么区别:

class A
{
   private:
   vector<Type> m_vector;
}

void fnc()
{
   m_vector.clear();
   m_vector.push_back();
   //further operations on vector
}

并在函数内部创建临时向量:

void fnc()
{
    vector<Type> vector;
    //further operations on vector
}

我想第一个选项会导致更少的内存碎片,因为我们正在做一个分配并使用这个区域,而在第二种情况下,我们正在为不同函数中的向量分配内存,这会导致内存碎片。

这种向量用法的优缺点是什么?当我的类在其函数中需要许多向量时,我应该使用哪一个?从内存管理网站看哪一个更好看?

4

3 回答 3

9

由于碎片和更少的分配/释放,从内存管理的角度来看,您的解决方案可能会更好,但是:

  • 在多线程环境中,您的线程安全性会降低——您可能需要在每个方法中围绕向量的使用实现一些同步
  • 您需要记住在每个方法中清除向量的内容
于 2012-06-04T11:40:11.913 回答
6

简单的规则:
如果你希望向量存在到你的类对象的生命周期中,让它成为一个类成员,否则不要。

简而言之,如果它的生命周期与对象的生命周期相关,您应该将其用作成员。
如果没有,您所需要的只是局部向量。
第一种或第二种方法是否更适合您的使用是微优化避免它们,除非您的使用量预计会足够大以至于担心避免使用它。

于 2012-06-04T11:34:41.143 回答
1

不要仅仅为了重用而制作成员向量。某个东西是否是成员应该基于类的逻辑。

于 2012-06-04T11:37:03.787 回答