std::string getMyString() { return <make a string>; }
...
HANDLE something = OpenSomething(getMyString().c_str(), ...);
I've read Guaranteed lifetime of temporary in C++ and I believe that the temporary string will live until the assignment has been evaluated, i.e. plenty long enough to make this work as expected.
Having once before run into an std::string
lifetime-related bug (can't remember what it was) I'd rather double-check...
Yes, this is fine. :-)
The string will be destroyed at the end of the statement, at the semi colon.
The destructor for the temporary will not be called until after the function call returns, so what we see here is safe.
However if the called function saves the char*
and it ends up being used somehow after OpenSomething
has returned, then that's one fine dangling pointer.
If you don't use any other argument of OpenSomthing
for returning pointer to getMyString.c_str()
everything will be OK.
来源:https://stackoverflow.com/questions/5449368/is-this-a-proper-use-of-a-temporary-stdstring