重新分配C++字符串,是否正确释放旧字符串?

Jan*_*egg 4 c++ string free constructor

我有一个c ++类,其成员是一个字符串,如下所示:

class Phone {
string name;

void foo()
  {
    name = string("new_name");
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,在函数"foo"中,我将字符串重新分配给"new_name".我的问题是:

  • 旧的空字符串会发生什么?它被正确地"释放"了吗?它还会占用记忆吗?
  • 现在我将Phone的构造函数中的字符串初始化为string("old_name").这与之前的空字符串是一样的吗?旧字符串"old_name"在这里会发生什么?

In *_*ico 7

是的,std::string为你管理记忆.(这是它存在的原因之一!)它是如何实现的(例如,它可能使用写时复制,引用计数或深度复制语义),但在大多数情况下,std::string将始终正确释放如果不再需要内存.

当然,这假设在赋值运算符或析构函数的实现中没有错误std::string(对于实现非默认赋值运算符/析构函数的所有类都是如此).