我如何在这里使用新的位置?

pyt*_*nic 4 c++ memory-management new-operator

我有一个内存区域,将用于多个队列.例如,我分配1024字节的内存,我需要两个队列.第一个队列将占用前512个字节,第二个队列将占用下一个512字节.

但是,我的队列由C++类表示.使用placement new运算符,我如何构造每个队列对象.以下方法是否正确?

Queue *q1, *q2;
void *mem = malloc( 1024 );

*q1 = new (mem) Queue;
*q2 = new (mem+512)Queue;
Run Code Online (Sandbox Code Playgroud)

And*_*nck 7

我会做以下事情:

Queue* mem = static_cast<Queue*>(malloc(2 * sizeof(Queue));
Queue* q1 = new (mem) Queue;
Queue* q2 = new (mem+1) Queue;
Run Code Online (Sandbox Code Playgroud)

如果两个队列彼此正好是512个字节很重要,那么您的原始建议几乎是正确的:

char* mem = static_cast<char*>(malloc(1024));
Queue* q1 = new (mem) Queue;
Queue* q2 = new (mem+512) Queue;
Run Code Online (Sandbox Code Playgroud)

这假定sizeof(Queue) <= 512.转换的原因char*是指针算术void*在C++中是非法的.

  • +1,只是为了勾勒出差异 - 你不能增加`void*`指针. (2认同)