Roman Starkov
Roman Starkov

Reputation: 61492

Is this a proper use of a temporary std::string?

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

Answers (3)

MaksBrrr
MaksBrrr

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

Bo Persson
Bo Persson

Reputation: 92301

Yes, this is fine. :-)

The string will be destroyed at the end of the statement, at the semi colon.

Upvotes: 8

Jon
Jon

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

Related Questions