我目前正在研究内存很少的设备(4MB),我的程序组件需要std :: set。我想将这个集合从使用std :: string迁移到使用const char指针,但我想知道在std :: set中使用时如何将内存分配给常量字符指针。
当指针从集合中删除时(通过使用.clear()或超出范围),是否释放为std :: set的每个条目分配的内存,或者字符串文字是否保留在内存中,直到程序执行结束了吗?
非常感谢你的帮助。 :)
答案 0 :(得分:1)
简而言之,没有什么特别的事情会发生。
删除包含指向某个内存的指针的结构只会释放指针本身使用的内存;它不会导致指向记忆的任何事情发生。
当然,除非您在其上明确地致电free
/ delete
。在字符串文字的情况下,这不是一个好主意!
答案 1 :(得分:0)
STL容器总是在清理它们时包含的元素的默认析构函数。对于一个持有原始'char *'指针的集合,这将不起作用,内存将被泄露。你有责任自己清理这种记忆。
出于这个原因,将原始指针存储在STL容器中通常被认为是不好的做法。
如果你真的必须在其中使用带有原始C字符串的STL集,那很好,但要注意你必须自己回收内存。您还需要为集合提供自定义比较器,以便通过值而不是指针来比较存储的字符串('char *'的默认排序只是比较指针而不是字符串)。