1

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

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

非常感谢您的帮助。:)

4

2 回答 2

1

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

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

当然,除非您明确地调用free/ delete。对于字符串文字,这不是一个好主意!

于 2011-02-19T23:55:41.863 回答
0

STL 容器在清理它们时总是为它们包含的元素计算默认析构函数。对于持有原始 'char *' 指针的集合,这将不会执行任何操作,并且内存将被泄漏。你负责自己清理 ip 这种内存。

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

如果您确实必须使用其中包含原始 C 字符串的 STL 集,那很好,但请注意您必须自己回收内存。您还需要为该集合提供一个自定义比较器,以便按值而不是按指针比较存储的字符串('char *' 上的默认排序只是比较指针,而不是字符串)。

于 2011-02-19T23:58:51.567 回答