std::string getMyString() { return <make a string>; }
...
HANDLE something = OpenSomething(getMyString().c_str(), ...);
我已阅读Guaranteed lifetime of temporary in C++并且我相信临时字符串将一直存在,直到评估分配为止,即足够长以使其按预期工作。
在遇到std::string
与生命有关的错误之前曾经有过一次(不记得是什么)我宁愿仔细检查......
答案 0 :(得分:8)
在函数调用返回之前,不会调用临时的析构函数,所以我们在这里看到的是安全的。
然而如果被调用的函数保存了char*
并且在 OpenSomething
返回后最终以某种方式使用了,那么这是一个很好的悬空指针。
答案 1 :(得分:7)
是的,这很好。 : - )
该字符串将在语句末尾的半冒号处销毁。
答案 2 :(得分:0)
如果你没有使用OpenSomthing
的任何其他参数来返回指向getMyString.c_str()
的指针,那么一切都会好的。