c++ - 这是对临时 std::string 的正确使用吗?

标签 c++ object-lifetime

std::string getMyString() { return <make a string>; }

...

HANDLE something = OpenSomething(getMyString().c_str(), ...);

我读过 Guaranteed lifetime of temporary in C++并且我相信临时字符串将一直存在到分配被评估之前,即足够长的时间来使这项工作按预期进行。

之前遇到过一次与 std::string 生命周期相关的错误(不记得是什么)我宁愿仔细检查......

最佳答案

临时函数的析构函数直到函数调用返回后才会被调用,所以我们在这里看到的是安全的。

但是如果被调用的函数保存了char* 并且它最终以某种方式被使用 after OpenSomething 有返回,那么这是一个很好的悬挂指针。

关于c++ - 这是对临时 std::string 的正确使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449368/

相关文章:

c++ - 为什么会出现 "Multiple Definitions"错误

c++ - 重载函数时使用临时对象作为参数是一种好习惯吗?

aop - Spring.NET 支持创建自定义对象生命周期吗?

c++ - 拒绝来自主机的连接

c++ - 编写 ODBC 驱动程序的替代方法

c++ - 友好度和派生类

c++ - fopen 和 fwrite 从多个线程到同一个文件

c++ - 单线程 C++ 函数调用中不可调试的非确定性 heisenbug

c++ - 访问其用户定义的析构函数已启动但未完成的对象真的是 UB 吗?

java - 在java中的方法内创建类实例的范围