首页 >后端开发 >C++ >`std::string::c_str()` 指针保持有效多久?

`std::string::c_str()` 指针保持有效多久?

DDD
DDD原创
2024-12-12 16:38:17510浏览

How Long Do `std::string::c_str()` Pointers Remain Valid?

std::string::c_str() 结果的生命周期

问题:

在与使用 const char 指针的遗留代码接口的程序中,开发人员查询std::string::c_str() 结果。他们特别询问以下代码片段是否安全:

{
  std::string server = "my_server";
  std::string name = "my_name";

  Foo foo;
  foo.server = server.c_str();
  foo.name = name.c_str();

  // use Foo

  // Foo about to be destroyed (before name and server)
}

答案:

std::string::c_str() 结果的生命周期取决于字符串的生命周期以及任何后续修改。如果字符串被修改或破坏,结果将无效。因此,当打算存储结果以供将来使用时,通常建议复制结果。

在提供的代码片段中,std::strings(服务器和名称)在以下范围内创建和修改:代码块。 c_str() 结果(foo.server 和 foo.name)指向这些临时 std::string,它们在作用域结束时被销毁。

但是,这些字符串不会在作用域之外使用,这使得在 use_foo() 和 ~Foo() 中继续使用 const char 指针在技术上是安全的。但是,如果这些函数可能将指针复制到其他位置,则应进行真正的复制,而不是简单地复制指针。

因此,虽然代码片段在这种特定情况下展示了技术上正确的行为,但良好的编码实践将如果需要存储 c_str() 结果以供以后使用,则需要复制 c_str() 结果。

以上是`std::string::c_str()` 指针保持有效多久?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn