c++ - 在析构函数上自动安全地清除 C++ std::string 和 std::vector 的内容

标签 c++ c++11

<分区>

我想从 std::string 和 std::vector 元素存储的内存中安全地清除(在简单情况下,将内容设置为零)敏感信息。我的 vector 也可以包含原始类型(如 std::vector),所以我想在 vector 的析构函数中清除所有包含的元素会更方便,因为原始类型没有析构函数。我不能用继承覆盖 std::string 和 std::vector 类,因为这些类型不是为此设计的(没有虚拟析构函数等)。还有别的办法吗?我发现了一些带有 std::string 自动清除功能的帖子,但那里的示例实现都不完整。目前,我在使用完对象后通过手动将内容设置为零来清除我的对象,但这非常乏味。

编辑:以这种方式清除内存也是不安全的,因为 C++ 容器可以在某些操作期间分配/取消分配内存。这就是为什么至少对于未使用 SSO(短字符串优化)的较长字符串,使用分配器(在类似问题中描述)可能是唯一的方法。

最佳答案

不,具有讽刺意味的是,面向对象的设计应该恰好支持这类事情。实际上它不起作用。

然而,您可以做的是重载 new/delete 运算符以调用 mymalloc()、myshreddingfree()、myshreddingfree 编写以删除释放的 block (因此您需要 mymalloc 来标记它的大小)。这有点繁琐,但 C++ 允许。

关于c++ - 在析构函数上自动安全地清除 C++ std::string 和 std::vector 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152967/

相关文章:

c++ - 如何在本身取决于另一个条件的条件下使用 std::enable_if?

c++ - 为什么我没有得到第 n 个斐波那契数列的正确输出?

c++ - 可能对 C++ 有更好的期望

c++ - ifstream fileOpen 导致程序到 'terminate in an unusual way'

c++ - va_list 还在 C++ 中使用吗?还是鼓励使用 template<typename...T>?

c++ - 使用 opencv 调试代码失败并出现段错误

c++ - unordered_map 值对 C++

C++11内存模型: why can't compiler move statements across load() operations during optimization?

c++ - operator==() 使用模板模板

c++ - 在 OPENGL 中计算直方图