如何使用 std::make_shared 创建动态大小缓冲区
How to create dynamic size buffer with std::make_shared
我想优化下一个方法
auto MakeBuffer(size_t size)
{
return std::shared_ptr<uint8_t>{new uint8_t[size], std::default_delete<uint8_t[]>()};
}
如您所见,缓冲区分两个阶段创建:
- 为缓冲区分配内存
- 创建shared_ptr(并为控制分配内存引擎盖下的对象)
在一般情况下,我们可以通过使用 std::make_shared 来避免双重分配。但是我该如何为动态大小缓冲区执行此操作?std::allocate_shared 不是解决方案(如果我理解正确的话),因为自定义分配器旨在仅创建对象而不是控制块
修复了缓冲区清理中的错误
如果可以改用boost
:
return boost::make_shared<uint8_t[]>(size);
似乎有人提议将扩展添加到标准中,但我不知道它的结果如何。也许它将成为未来标准的一部分。更新:现在是C++20。
相关文章:
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- Vulkan 中的动态顶点缓冲区格式设置
- 导致堆缓冲区错误的动态分配数组的析构函数
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 从C 中的函数中动态分配的缓冲区返回的最佳模式是什么?
- 用于保存按下的键的动态缓冲区 - c++
- 将包含位字段和动态数据的结构复制到 Char 数组缓冲区中
- Vulkan中动态统一缓冲区的缓冲区内存分配
- 如何使用 std::make_shared 创建动态大小缓冲区
- 在 Windows 应用商店应用中映射 Direct3D11 中的动态缓冲区
- 抽象数据类型命名约定:(动态)数组,向量,序列,列表,容器,缓冲区
- 动态打包 OpenGL 顶点缓冲区对象的数据
- 动态顶点缓冲区在 D3D 中的效率和使用情况
- 如何在动态char*缓冲区上使用strcpy
- 缓冲区的动态内存分配
- 动态分配缓冲区(字符字符串)大小 =i;使用马洛克
- 带有动态缓冲区的Windows readfile
- c++中的动态(类型)二进制缓冲区
- Zlib deflate和动态输出缓冲区
- 在C中连接两个字符串并动态分配缓冲区