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)
我会做以下事情:
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++中是非法的.
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |