【发布时间】:2013-07-10 19:45:06
【问题描述】:
在 string::clear 函数的描述中,它说:
clear:擦除字符串的内容,变成空字符串(长度为0个字符)。
在 list::clear 函数的描述中,它说:
clear:从列表容器中移除所有元素(被销毁),并留下大小为 0 的容器。
清除是覆盖字符串和列表的内存还是只是释放它们?
【问题讨论】:
-
都不释放内存。 C++11 提供了一个
shrink_to_fit成员函数,它至少请求实现这样做。 -
@CodyGray:如果
std::list没有释放clear()上的内存,我会感到惊讶......你可能正在考虑std::vector -
@DavidRodríguez-dribeas - 允许实现缓存列表节点以供将来重用。在我看来,Rogue Wave 的图书馆在这方面做了很多。
-
@PeteBecker:是的,我们自己的实现就是这样做的,但从概念上讲,内存已经被释放。这里也没有
shrink_to_fit可以帮助列表,因为节点仍将由库缓存。 -
@DavidRodríguez-dribeas - 这可能越来越技术化了,但我得到的区别是,当你“释放”内存时,它通常意味着内存回到免费存储,并且是可在程序的任何地方重复使用;将其释放到节点缓存使其可用于相同大小的节点,但不适用于一般用途。毫无疑问,这不是这个问题的重点。
<g>