我想使用STL容器(加上std::basic_string
)暂时将密钥或密码存储在内存中,我想在完成后将内存归零。
我最初计划使用在allocator::deallocate
中将内存归零的自定义分配器上参数化的STL容器,但我假设容器允许使用不来自指定分配器的内存。例如,std::vector
或std::string
包含用于小分配的固定大小数组成员似乎是合理的。
我是否正确地关注,我是否应该(叹气)写自己的容器?
答案 0 :(得分:7)
我会使用std::vector
与自定义分配器进行清零。根据{{3}}的答案,它不能使用小缓冲区优化,因此,对于自定义分配器,您应该是安全的。
如果你更进一步,并使用该分配器来分配向量,然后使用智能指针确保它正确释放(或手动执行),甚至是向量的内部内容(例如大小) )将被消灭。
答案 1 :(得分:2)
你可以通过使用原始内存和placement new分配字符串/向量来完成此操作,当你完成它时,调用析构函数,零内存并释放原始内存。
答案 2 :(得分:-1)
使用自定义字符串类,在其析构函数中将内存缓冲区归零。
class zeroed_string : public std::string
{
public:
~zeroed_string()
{
for (int i = 0; i < size(); ++i)
(*this)[i] = 0;
}
// ...
};