我的C++程序中有一个字符串对象,声明如下:
string str;
我已经将一些数据复制到其中并进行了一些操作。现在我想从内存中删除str对象。由于str不是指针,因此我无法使用delete运算符。如何从内存中删除该对象以回收为其分配的内存?
谢谢, Rakesh.
我的C++程序中有一个字符串对象,声明如下:
string str;
不需要。当字符串超出作用域时,它的析构函数将自动调用,并释放内存。
如果你想立即清除字符串(而不必等到它超出作用域),只需使用 str.clear()
。
clear
不会释放内存...但其他实现可能会。 - Stephenstr.clear();
str = "";
然而,正如评论中所述,这并不保证(实际上相当不可能)确实返回堆内存。另外也无法保证其可行性,但在实践中运作良好的是交换技巧:
std::string().swap(str);
然而,实现采用小字符串优化的话将保留一些字节的堆栈空间(当然,str
本身也存在于堆栈上)。
最终,我同意所有评论中提到的疑问,即为什么要这样做。只要str
超出其作用域,其数据就会自动删除:
{
std::string str;
// work with str
} // str and its data will be deleted automatically
std::string().swap(str);
-- 否则你会将一个临时对象绑定到非 const 引用上。 - avakar添加额外的范围
{
String str;
...
...
}