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

Automatically clear contents securely of C++ std::string and std::vector on destructor

本文关键字:std string vector c++ 析构函数 安全 清除      更新时间:2023-10-16

我想安全地从std::string和std::vector元素存储的内存中清除敏感信息(在简单的情况下,将内容设置为零)。我的vector也可以包含基本类型(比如std::vector),所以我想在vector的析构函数中清除所有包含的元素会更方便,因为基本类型没有析构函数。我不能用继承重写std::string和std::vector类,因为这些类型不是为继承而设计的(没有虚析构函数等)。还有别的办法吗?我发现了一些std::string自动清除的帖子,但样本实现都不完整。目前我清除我的对象手动设置内容为零时,完成使用对象,但这是非常繁琐的。

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

不,具有讽刺意味的是,面向对象的设计应该支持这类事情。在现实中这是行不通的。

然而,你可以做的是重载new/delete操作符来调用mymalloc(), myshreddingfree(), myshreddingfree来擦除释放的块(所以你需要mymalloc来标记它的大小)。这有点繁琐,但c++允许。