13

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

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

我是否正确地担心,我应该(叹息)编写自己的容器吗?

4

3 回答 3

8

我会使用std::vector一个自定义分配器来进行归零。根据May std::vector 的答案,使用小缓冲区优化?,它不能使用小缓冲区优化,因此,使用自定义分配器,你应该是安全的。

如果您更进一步,并使用该分配器来分配向量,然后使用智能指针来确保它正确释放(或手动执行),即使是向量的内部内容(例如大小)也将是歼灭。

于 2012-08-08T21:01:20.303 回答
2

您可以通过使用原始内存和放置 new 分配字符串/向量来做到这一点,当您完成它时,调用析构函数、零内存并释放原始内存。

于 2012-08-08T21:05:36.737 回答
-1

使用自定义字符串类,将其析构函数中的内存缓冲区归零。

class zeroed_string : public std::string
{
public:
    ~zeroed_string()
    {
        for (int i = 0; i < size(); ++i)
            (*this)[i] = 0;
    }
// ...
};
于 2012-08-08T21:36:04.063 回答