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

Optimizing calls to new for a vector of pointers?

本文关键字:new 调用 优化 指针 向量      更新时间:2023-10-16

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

我使用指针向量,因为我尝试了一个列表,但它一直崩溃。我需要能够在其他地方使用指针,这样Foo的正则向量就不起作用了。

例如:b.add(&myRegularVec[6])//当我添加更多时,这个指针将无效。

问题是我需要向量的储备能力。现在,我有一个这样的功能:

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

不幸的是,这需要大量的新功能,而探查器说这是瓶颈。

我不能使指针无效,例如:为了增长,我需要重做新的[]。

我该怎么做才能避免这么多新电话,并使其更快?

感谢

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

我有一个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,它不会重新分配旧项目。