我想从std :: string和std :: vector元素存储的内存中安全地清除(在简单的情况下,将内容设置为零)敏感信息。我的向量也可以包含原始类型(比如std :: vector),所以我想在向量析构函数中清除所有包含的元素会更方便,因为primite类型没有析构函数。我不能用继承覆盖std :: string和std :: vector类,因为那些类型不是为那个设计的(没有虚拟析构函数等)。还有其他方法吗?我找到了一些std :: string自动清除的帖子,但样本实现都不完整。目前,我通过在完成使用对象时手动将内容设置为零来清除我的对象,但这非常繁琐。
编辑:同样以这种方式清除内存并不安全,因为C ++容器可以在某些操作期间分配/释放内存。这就是为什么使用分配器(在类似问题中描述)可能只是这样做的方法,至少对于不使用SSO(短字符串优化)的较长字符串而言。
答案 0 :(得分:1)
不,具有讽刺意味的是,面向对象的设计应该支持这种事情。实际上它不起作用。
然而你可以做的是重载new / delete操作符来调用mymalloc(),myshreddingfree(),myshreddingfree编写以便擦除释放的块(所以你需要mymalloc来标记它的大小)。它有点繁琐,但是C ++允许的东西。