管理用新char*创建但用自定义分配器分配给std::vector元素的内存块
Managing memory block created with new char* but allocated to std::vector elements with custom allocator
我一直在研究一个以连续方式存储向量的项目。我当前的设置有std::vector
的custom allocator
,其中包含对memory management object
的引用。
-
memory management object
包含一个指向当前缓冲区的char*
和一个std::vector
,一旦缓冲区满了,我就把char *
推到缓冲区。 - 每个
char*
缓冲区由memory management object
与new
调用创建。 - 使用自定义分配器的
std::vectors
被包装在SmallVector
类中。 -
SmallVectors
是通过调用它们的类构造函数创建的,这些构造函数不包含任何new
或malloc
语句。
I delete
是我在memory management object
的析构函数中用new
创建的char*'s
,通过循环遍历包含char *s
和delete-ing
的向量。其他的事情会自己解决吗?即使是这样,对于这种情况,我是否可以采取更严格的内存管理步骤?
每个char*缓冲区由内存管理对象通过一个新的调用创建。
这应该是一个调用operator new
(ref)来获得未初始化的内存(除非你知道这是你想要的)。
从你发布的信息来看,是的。只要确保你的分配器是CopyConstructable(基本上,其他的事情会自己解决吗?
allocator a; allocator b(a);
工作)。
即使它会,是适当的,或者有更严格的内存管理步骤,我可以采取这种情况?
如果你坚持使用new
,你可以使用std::unque_ptr
来自动释放,或者如果你使用operator new
,你可以使用std::unique_ptr
来自定义删除器。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g