我需要在一个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)?
谢谢!
更新 没有提到我需要释放字符串的原因:我需要像上面那样管理许多结构,字符串字段可以占用大量内存(每个结构本身与字符串相比不会占用太多内存),所以我需要尽可能释放字符串对象指向的内存。
答案 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方法。不再需要字符串。