从空指针初始化类/结构

卡勒姆·麦克马纳斯

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

所以当我创建一个对象时,我会这样做

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

但这不允许我访问类 Data 的构造函数,我必须在创建它后分配该值。

无论如何,是否可以更改此设置以允许我以与使用相同的方式传递参数

Data* test = new Data(5, 5, 5);

不确定是否可能。

呜呜呜

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

文档中的示例:

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()

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章