为指针向量优化对new的调用
Optimizing calls to new for a vector of pointers?
我有一个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
,它不会重新分配旧项目。
相关文章:
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 双指针在使用 new 时不调用对象构造函数
- 编译器是否在由 new 初始化的对象上调用隐式析构函数
- "new"运算符是否总是调用构造函数?
- 重载运算符 new(),为什么构造函数被调用两次?
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 有没有办法让shared_ptr.reset(new obj)首先调用析构函数?
- 调用隔离后访问冲突执行位置0x0000000000000000:New()
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- 显式调用"运算符 new"后无法访问对象的函数
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- 如何使用new()在嵌套类中调用方法
- 在不同的编译器版本中调用new[]和delete[]
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 如何保护 mmap() 分配的内存空间不被'new'调用分配?
- 重载New调用自动构造对象
- 为什么c++在创建数组时不允许' new '调用构造函数?
- 为什么为重载运算符new调用类构造函数
- 我可以在c++中使用new调用函数吗
- 在c++中重载全局new()调用之前未初始化全局静态变量