C++ 对函数返回的临时对象调用成员函数是否安全(在函数返回后)?
我不知道当临时对象由(另一个)函数创建并返回时,调用临时对象的成员函数是否安全 以下是一个例子:C++ 对函数返回的临时对象调用成员函数是否安全(在函数返回后)?,c++,C++,我不知道当临时对象由(另一个)函数创建并返回时,调用临时对象的成员函数是否安全 以下是一个例子: string getString(const string &str) { string tempStr = str + str; return tempStr; } int main() { if(getString("aaaaa").compare("bbbb") == 0) { // is it safe? // do something
string getString(const string &str)
{
string tempStr = str + str;
return tempStr;
}
int main()
{
if(getString("aaaaa").compare("bbbb") == 0) { // is it safe?
// do something
}
}
我还做了如下的终身测试
class Foo
{
public:
Foo()
{
cout << __PRETTY_FUNCTION__ << " :" << this << endl;
}
~Foo()
{
cout << __PRETTY_FUNCTION__ << " :" << this << endl;
}
void show()
{
cout << this << endl;
}
};
Foo func(void)
{
return Foo();
}
int main()
{
func().show();
return 0;
}
class-Foo
{
公众:
Foo()
{
cout由函数的return语句创建的临时对象(按值返回对象)至少在调用该函数的整个语句完成之前存在。因此这是安全的
由于返回值优化,您没有看到tempStr
被销毁。但是,即使tempStr
被销毁,代码仍然是100%安全的,因为您正在访问的临时对象不是tempStr
,而是由returnby value创建的对象。由fu的return语句创建的临时对象按值返回对象的操作至少在调用该函数的整个语句完成之前有效。因此这是安全的
由于返回值优化,您没有看到tempStr
被销毁。但是,即使tempStr
被销毁,代码仍然是100%安全的,因为您正在访问的临时文件不是tempStr
,而是由返回值创建的文件