gpt4 book ai didi

c++ - 我如何在这里使用 placement new ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:00 25 4
gpt4 key购买 nike

我有一 block 内存区域,将用于多个队列。比如我分配了1024字节的内存,需要两个队列。第一个队列将占用前 512 个字节,第二个队列将占用接下来的 512 个字节。

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

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

*q1 = new (mem) Queue;
*q2 = new (mem+512)Queue;

最佳答案

我会做以下事情:

Queue* mem = static_cast<Queue*>(malloc(2 * sizeof(Queue));
Queue* q1 = new (mem) Queue;
Queue* q2 = new (mem+1) Queue;

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

char* mem = static_cast<char*>(malloc(1024));
Queue* q1 = new (mem) Queue;
Queue* q2 = new (mem+512) Queue;

假设 sizeof(Queue) <= 512 .投向char*的原因是 void* 的指针算法吗?在 C++ 中是非法的。

关于c++ - 我如何在这里使用 placement new ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10121157/

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