针对指针向量优化对new的调用?

时间:2012-03-24 14:22:38

标签: c++ vector

我有一个Foo *的向量。我放在里面的东西总是Foo *,没有多态性。

我使用指针向量,因为我尝试了一个列表并且它一直在崩溃。我需要能够在其他地方使用指针,因此Foo的常规向量将无效。

ex:b.add(& myRegularVec [6]); //当我添加更多时,这个指针不会有效。

问题是我需要vector的保留功能。现在,我有这样的功能:

void addRange(int quantity)
{
   for (int i = 0; i < quantity; ++i)
        {
            Foo* obj = new Foo(i);
             m_theVector.push_back(obj);
             b.add(obj);
        }
}

不幸的是,这引起了很多新的讨论,并且剖析器说它是瓶颈。

我无法使指针无效:成长我需要重做新的[]。

我可以做些什么来避免这么多新来电并让它更快?

由于

2 个答案:

答案 0 :(得分:4)

您可以使用deque<Foo>而不是vector<Foo*>,因为deque在增长容器时不会使指针无效。

答案 1 :(得分:0)

  

我有一个Foo *的向量。我放在里面的东西总是Foo *,没有多态性。

如果没有多态性,那么你需要一个Foo的向量,而不是Foo*。您没有正确的理由在程序中使用Foo*。所以忘记你目前在做什么,然后重新开始std::vector<Foo>

std::vector<Foo> m_theVector;

然后这样做:

void addRange(int quantity)
{
   for (int i = 0; i < quantity; ++i)
   {
      m_theVector.push_back(Foo(quantity));
   }
}

如果您因任何原因担心重新分配,请使用不会重新分配旧项目的std::list