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

...

HANDLE something = OpenSomething(getMyString().c_str(), ...);

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

曾经遇到过与std::string生命周期相关的错误(不记得它是什么)我宁愿仔细检查......

4

3 回答 3

8

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

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

于 2011-03-27T13:01:58.000 回答
7

是的,这很好。:-)

该字符串将在语句末尾的分号处被销毁。

于 2011-03-27T13:02:09.373 回答
0

如果您不使用任何其他参数OpenSomthing来返回指向getMyString.c_str()所有内容的指针就可以了。

于 2011-03-27T13:27:16.390 回答