代码之家  ›  专栏  ›  技术社区  ›  jamesdlin

STL容器使用的内存归零

c++
  •  13
  • jamesdlin  · 技术社区  · 12 年前

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

    我最初计划在一个自定义分配器上使用参数化的STL容器,该分配器将内存归零 allocator::deallocate ,但我假设容器可以使用非来自指定分配器的内存。例如 std::vector 或者 std::string 以包含用于小分配的固定大小数组成员。

    我有理由担心吗?我应该(叹气)写下我自己的容器吗?

    3 回复  |  直到 12 年前
        1
  •  8
  •   Community CDub    7 年前

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

    如果你更进一步,使用分配器来分配向量,然后使用智能指针来确保它的正确发布(或手动执行),甚至向量的内部内容(如大小)也会被删除。

        2
  •  2
  •   Daniel    12 年前

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

        3
  •  -1
  •   Mark Ransom    12 年前

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

    class zeroed_string : public std::string
    {
    public:
        ~zeroed_string()
        {
            for (int i = 0; i < size(); ++i)
                (*this)[i] = 0;
        }
    // ...
    };