这是正确使用临时std :: string吗?

时间:2011-03-27 13:00:06

标签: c++ object-lifetime

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

...

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

我已阅读Guaranteed lifetime of temporary in C++并且我相信临时字符串将一直存在,直到评估分配为止,即足够长以使其按预期工作。

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

3 个答案:

答案 0 :(得分:8)

在函数调用返回之前,不会调用临时的析构函数,所以我们在这里看到的是安全的。

然而如果被调用的函数保存了char*并且在 OpenSomething返回后最终以某种方式使用了,那么这是一个很好的悬空指针。

答案 1 :(得分:7)

是的,这很好。 : - )

该字符串将在语句末尾的半冒号处销毁。

答案 2 :(得分:0)

如果你没有使用OpenSomthing的任何其他参数来返回指向getMyString.c_str()的指针,那么一切都会好的。