调用临时对象的方法是否安全?

Emi*_*ano 9 c++ string stl g++

我有一个函数,它将返回一个char*.由于我必须连接一些字符串,我写了以下行:

std::string other_text;
// ...
func(("text" + other_text).c_str());
Run Code Online (Sandbox Code Playgroud)

我知道我可以避免命名我想要使用的字符串的问题.我只是想借此机会提出一个更普遍的问题:调用临时变量的方法是否安全?它符合标准吗?

Bri*_*ndy 13

调用临时变量的方法是安全的,但是不能安全地返回临时变量的char*以供以后使用.

这个char*指向一个即将被释放的缓冲区.一旦它被释放,你将有一个指向内存中无效区域的指针.

相反,请返回一个std :: string对象.


j_r*_*ker 6

你可以调用temporaries上的方法,但是你必须要小心对象的生命周期 - 特别是,如果你有一个函数返回c_str()一个临时调用的函数std::string,那么当函数返回时该字符串对象将被销毁.

您上面的代码遇到了这个问题.