从void指针初始化类/结构

时间:2018-11-04 20:06:40

标签: c++ memory-management constructor memory-pool

我有一个分配为char *的内存池。当我想创建一个对象时,我需要从该池中请求内存,该内存将在该池中某个位置的char *返回强制转换为void *。

因此,当我创建一个对象时,我会这样做

Data* poolTest = (Data*)pool->GetMemory(sizeof(Data));

但是,这不允许我访问Data类的构造函数,并且在创建值后必须赋值。

无论如何,有没有要更改此设置的方法,以允许我以与

相同的方式传递参数
Data* test = new Data(5, 5, 5);

不确定是否可以。

1 个答案:

答案 0 :(得分:3)

您似乎正在寻找展示位置。基本上,您给它原始内存,并在提供的内存区域中创建具有动态存储持续时间的对象。当然,管理内存区域和创建的对象的生命周期完全取决于您。

文档示例:

char* ptr = new char[sizeof(T)]; // allocate memory
T* tptr = new(ptr) T;            // construct in allocated storage ("place")
tptr->~T();                      // destruct
delete[] ptr;                    // deallocate memory

供参考:

可能的std::uninitialized_fill()也可以满足您的用例:

如果您有权使用C ++ 17功能,请同时查看std::uninitialized_default_construct()std::uninitialized_value_construct()

也许您应该考虑编写一个分配器来包装您的内存池: