我有一个对象定义为,
class X
{
string name;
map<string,string> value;
vector<X*> ptrs;
public:
X(const char a* ="", const char* b ="")
{
value[a]=b;
}
~X()
{
for( i = 0; i< ptrs.size();i++)
delete ptr[i];
}
};
int main()
{
while( j++ < 200)
{
X* p = new X;
while( i++ < 100)
{
X* y = new X("one","first");
p.add(y);
}
delete p;
}
}
正在进行X
和ptr
的多次分配。
在这种情况下如何重新使用内存? 我想避免多次新建和删除调用,导致虚拟机使用率过高。
答案 0 :(得分:1)
是的,您可以使用展示位置
// Allocate initial memory
X *arr = new X[number_of_elems];
for (size_t i = 0; i < number_of_elems; i++) {
new (arr + i) X(); // Create objects in place
}
// Destroy object without deleting
arr[index].~X();
// create on that space again
new (arr + index) X();
编辑: 再次阅读你想要使用容器的问题,在这种情况下你应该使用一个使用内存池容器的自定义分配器。在这种情况下,分配器将调用该容器以根据需要为STL容器提供内存,而内存池将只执行一个大的alloc并根据需要提供内存指针(例如,它可能会增加指针,但您可能会得到如果你想从你的矢量的不同点删除对象,就会出现碎片问题。)