首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空字符串作为结构中的字段

空字符串作为结构中的字段
EN

Stack Overflow用户
提问于 2015-06-16 14:45:39
回答 1查看 283关注 0票数 0

我需要释放结构字段中的string对象,不知道该如何做。

代码语言:javascript
复制
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对象指向的内存。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-16 15:57:59

如果您需要清除一个std::string并释放与它关联的内存,您可以使用b.clear()清除字符串,然后请求它的存储为收缩至适合b.shrink_to_fit()

以你为例,你会写:

代码语言:javascript
复制
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方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30870929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档