归零STL容器使用的内存

时间:2012-08-08 20:50:58

标签: c++

我想使用STL容器(加上std::basic_string)暂时将密钥或密码存储在内存中,我想在完成后将内存归零。

我最初计划使用在allocator::deallocate中将内存归零的自定义分配器上参数化的STL容器,但我假设容器允许使用不来自指定分配器的内存。例如,std::vectorstd::string包含用于小分配的固定大小数组成员似乎是合理的。

我是否正确地关注,我是否应该(叹气)写自己的容器?

3 个答案:

答案 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;
    }
// ...
};