gpt4 book ai didi

c++ - 自由字符串作为结构中的字段

转载 作者:行者123 更新时间:2023-11-28 00:15:03 26 4
gpt4 key购买 nike

我需要释放结构体字段中的字符串对象,想知道我应该怎么做。

struct strDum {
int a;
string b;
strDum(): a(), b() {};
};

//in the code
strDum x;
x.b.append("this is a long string ....");
//do something else
...
//need to free the memory allocated in x.b, how do I do it?
//should I use delete &(x.b)?

谢谢!

更新没有提到我需要释放字符串的原因:我需要像上面那样管理许多结构,字符串字段会占用大量内存(与字符串相比,每个结构本身并不占用太多内存), 所以我需要尽可能释放字符串对象指向的内存。

最佳答案

如果需要clear a std::string 并释放与其关联的内存,您可以使用 b.clear() 清除字符串,然后请求其存储为 shrunk to fit使用 b.shrink_to_fit()

以你的例子为例,你会写:

struct strDum {
int a;
std::string b;
strDum(): a(), b() {};
};

//in the code
strDum x;
x.b.append("this is a long string ....");
//do something else
...
x.b.clear();
x.b.shrink_to_fit();

请注意,对 shr​​ink_to_fit() 的调用是非绑定(bind)的;也就是说,系统可以随意忽略它。即使从字符串中释放内存(使其可用于程序中的后续分配),您可能会发现进程的虚拟内存使用量(“vsize”)并没有减少。以这种方式回收释放的内存取决于库实现和操作系统本身。

另请注意,除非字符串持续很长时间,否则您不需要释放此内存。如果字符串超出范围,它的析构函数将为您清理。如果您想重用字符串(内容大小明显不同)或者如果您的字符串对象持续时间足够长以至于其他地方需要它使用的内存,但字符串的内容不再需要。

关于c++ - 自由字符串作为结构中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com