我需要释放结构字段中的string对象,不知道该如何做。
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)?谢谢!
UPDATE没有提到我需要释放字符串的原因:我需要像上面这样管理许多结构,string字段可以占用大量内存(每个结构本身相对于字符串本身不占用太多内存),所以我需要尽可能地释放string对象指向的内存。
发布于 2015-06-16 15:57:59
如果您需要清除一个std::string并释放与它关联的内存,您可以使用b.clear()清除字符串,然后请求它的存储为收缩至适合和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();请注意,对shrink_to_fit()的调用是非绑定的;也就是说,系统可以随意忽略它。即使从字符串中释放内存(使其可用于程序中的后续分配),您也可能会发现进程的虚拟内存使用量("vsize")并没有减少。以这种方式回收释放的内存取决于库实现和操作系统本身。
还请注意,除非字符串持续了很长时间,否则不需要释放此内存。如果字符串超出作用域,则其析构函数将为您清理。如果您想重用字符串(其内容大小有很大不同),或者如果您的字符串对象持续时间足够长,以至于它使用的内存在其他地方都需要,但是字符串的内容不再需要,那么您只需要使用这个清除/收缩_ to _fit方法。
https://stackoverflow.com/questions/30870929
复制相似问题