Reputation: 61492
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...
Upvotes: 6
Views: 1282
Reputation: 1
If you don't use any other argument of OpenSomthing
for returning pointer to getMyString.c_str()
everything will be OK.
Upvotes: 0
Reputation: 92301
Yes, this is fine. :-)
The string will be destroyed at the end of the statement, at the semi colon.
Upvotes: 8
Reputation: 437494
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.
Upvotes: 8