这是正确使用临时std :: string吗?

Rom*_*kov 5 c++ object-lifetime

std::string getMyString() { return <make a string>; }

...

HANDLE something = OpenSomething(getMyString().c_str(), ...);
Run Code Online (Sandbox Code Playgroud)

我已经读过C++中的临时保证生命周期,并且我相信临时字符串将一直存在,直到评估了赋值,即足够长以使其按预期工作.

有一次遇到与std::string生命有关的错误(不记得是什么)我宁愿仔细检查......

Jon*_*Jon 8

直到函数调用返回后才会调用临时的析构函数,所以我们在这里看到的是安全的.

但是,如果被调用的函数保存char*并且它最终 OpenSomething返回之后以某种方式被使用,那么这是一个很好的悬空指针.


Bo *_*son 7

是的,这很好.:-)

该字符串将在语句末尾的半冒号处销毁.