在std :: set容器中使用常量字符指针:内存消耗

时间:2011-02-19 23:51:53

标签: c++ pointers char memory-management stdset

我目前正在研究内存很少的设备(4MB),我的程序组件需要std :: set。我想将这个集合从使用std :: string迁移到使用const char指针,但我想知道在std :: set中使用时如何将内存分配给常量字符指针。

当指针从集合中删除时(通过使用.clear()或超出范围),是否释放为std :: set的每个条目分配的内存,或者字符串文字是否保留在内存中,直到程序执行结束了吗?

非常感谢你的帮助。 :)

2 个答案:

答案 0 :(得分:1)

简而言之,没有什么特别的事情会发生。

删除包含指向某个内存的指针的结构只会释放指针本身使用的内存;它不会导致指向记忆的任何事情发生。

当然,除非您在其上明确地致电free / delete。在字符串文字的情况下,这不是一个好主意!

答案 1 :(得分:0)

STL容器总是在清理它们时包含的元素的默认析构函数。对于一个持有原始'char *'指针的集合,这将不起作用,内存将被泄露。你有责任自己清理这种记忆。

出于这个原因,将原始指针存储在STL容器中通常被认为是不好的做法。

如果你真的必须在其中使用带有原始C字符串的STL集,那很好,但要注意你必须自己回收内存。您还需要为集合提供自定义比较器,以便通过值而不是指针来比较存储的字符串('char *'的默认排序只是比较指针而不是字符串)。