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

风格不统一 提交于 2019-12-22 07:59:12

问题


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...


回答1:


Yes, this is fine. :-)

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




回答2:


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.




回答3:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!