gpt4 book ai didi

c++ - 在预分配内存中创建对象

转载 作者:可可西里 更新时间:2023-11-01 18:29:46 26 4
gpt4 key购买 nike

我们可以使用 placement new 在预分配的内存中创建一个对象。

让我们考虑以下示例:

char *buf  = new char[1000];   //pre-allocated buffer
string *p = new (buf) MyObject(); //placement new
string *q = new (buf) MyObject(); //placement new

我在预分配缓冲区中创建了两个对象。这两个对象是在缓冲区内随机创建的还是在连续的内存块中创建的?如果我们不断地在缓冲区中创建更多的对象,并希望它们存储在连续的内存块中,我们应该怎么做呢?先在缓冲区中创建一个数组,然后在数组的元素槽中创建每个对象?

最佳答案

这两个对象都创建在相同的内存位置,即buf。这是未定义的行为(除非对象是 POD)。

如果你想分配多个对象,你必须递增指针,例如buf + n * sizeof(MyObject),但要注意对齐问题

完成后不要忘记调用析构函数。

关于c++ - 在预分配内存中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301043/

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