【发布时间】:2012-08-08 20:50:58
【问题描述】:
我想使用 STL 容器(加上 std::basic_string)将密钥或密码临时存储在内存中,并且我想在完成后将内存归零。
我最初计划使用在自定义分配器上参数化的 STL 容器,该分配器将 allocator::deallocate 中的内存归零,但我假设容器可以使用并非来自指定分配器的内存。例如,std::vector 或 std::string 包含用于小分配的固定大小数组成员似乎是合理的。
我的担心是否正确,我应该(叹息)自己编写容器吗?
【问题讨论】:
-
我不明白,你为什么不使用向量,在让它超出范围之前,只做一个 memset(myVec, 0x00, myVec.size())?
-
对于
std::vector,您必须跳过燃烧的箍以满足异常要求,并且仍然将数据存储在矢量对象本身中。对于std::string,在对象中存储数据不仅是可能的,而且相当普遍。 -
@AntonRoth:因为如果有人调用
std::vector::resize或std::vector::push_back并导致std::vector分配一个新的内存块并复制现有缓冲区会发生什么? -
是的,我在较早的答案中写道,我删除了,因为我不太确定这个问题,你可以分配比以往更多的内存,并将其归零。还是使用的内存很关键?
-
我在这里遗漏了什么吗?让清理存储对象而不是容器的责任不是更有意义吗?那么只是让容器存储一个类项,其析构函数会自行清理吗?当向量调整大小时,不要复制构造函数,然后调用析构函数...?
标签: c++