C++ std::string::clear和std::list::clear是否从内存中擦除数据

C++ std::string::clear和std::list::clear是否从内存中擦除数据,c++,string,list,C++,String,List,在string::clear函数的描述中,它表示: 清除:删除字符串的内容,该字符串将变为空字符串(长度为0个字符) 在list::clear函数的描述中,它说: 清除:从列表容器中删除所有元素(已销毁),并保留大小为0的容器 清除是覆盖字符串和列表的内存还是释放它们?覆盖已擦除的数据都不需要函数。内存不会被覆盖。它甚至不能保证被释放 例如,如果您创建一个巨大的字符串并对其调用clear,则只会减小其大小,但分配的内存仍可能保留。但是,如果字符串超出范围,它将被释放 std::list至少可以保

在string::clear函数的描述中,它表示:

清除:删除字符串的内容,该字符串将变为空字符串(长度为0个字符)

在list::clear函数的描述中,它说:

清除:从列表容器中删除所有元素(已销毁),并保留大小为0的容器


清除是覆盖字符串和列表的内存还是释放它们?

覆盖已擦除的数据都不需要函数。

内存不会被覆盖。它甚至不能保证被释放

例如,如果您创建一个巨大的字符串并对其调用
clear
,则只会减小其大小,但分配的内存仍可能保留。但是,如果字符串超出范围,它将被释放

std::list
至少可以保证,如果清除列表,列表中的元素将被销毁


因此,如果您的内存包含敏感数据,您应该手动覆盖它们。

+1事实上,在发布版本中,我假设它没有被覆盖。也不要释放内存。C++11提供了一个
shorn_to_fit
成员函数,该函数至少请求实现这样做。@CodyGray:如果
std::list
没有释放
clear()
上的内存,我会感到惊讶。。。您可能正在考虑
std::vector
instead@DavidRodríguez dribeas-该实现允许缓存列表节点以供将来重用。在我看来,Rogue Wave的库做了很多这方面的工作。@PeteBecker:是的,我们自己的实现做了,但从概念上讲,内存已经释放了。这里也没有
收缩到适合的
可以帮助列表,因为节点仍然会被库缓存。@DavidRodríguez dribeas-这可能是超技术的,但我想说的区别是,当你“释放”内存时,通常意味着内存会回到空闲存储,并且可以在程序中的任何位置重用;将其释放到节点缓存可使其用于相同大小的节点,但不用于一般用途。这无疑不是这个问题的重点<代码>