我们可以使用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)
,但要注意对齐问题
完成后也不要忘记调用析构函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)