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

时间:2015-06-16 14:45:40

标签: c++ string

我需要在一个struct的字段中释放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)?

谢谢!

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

1 个答案:

答案 0 :(得分:3)

如果您需要clear一个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();

请注意,对shrink_to_fit()的调用不具有约束力;也就是说,系统可以自由地忽略它。即使从字符串中释放内存(使其可用于程序中的后续分配),您可能会发现进程的虚拟内存使用量(" vsize")不会降低。以这种方式回收释放的内存取决于库实现和操作系统本身。

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