gpt4 book ai didi

c++ - 具有对象指针容器的对象的内存池

转载 作者:行者123 更新时间:2023-11-28 04:46:43 25 4
gpt4 key购买 nike

我有一个对象定义为,

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;
}
}

正在对 Xptr 进行多次分配。

在这种情况下我如何重新使用内存?我想避免多次调用 new 和 delete,导致 VM 使用率过高。

最佳答案

是的,你可以通过使用 placement new

// 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 容器提供内存,而内存池将只进行大分配并根据需要提供内存指针(例如,它可能会增加一个指针,但您可能会得到如果你想从 vector 的不同点移除对象,就会陷入碎片问题)

关于c++ - 具有对象指针容器的对象的内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49133743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com