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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top