1
我不知道当(另一个)函数创建临时对象并返回时是否可以安全地调用临时对象的成员函数。对函数返回的临时对象(函数返回后)调用成员函数是否安全?
下面是一个例子:
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;
}
结果:
富::美孚():0x7fff4d03d3bf
无效美孚::显示():0x7fff4d03d3bf
富::〜美孚():0x7fff4d03d3bf
似乎析构函数将在成员函数完成后启动。 但是,这取决于编译器?
PS:我使用的编译器为g ++ v 5.3.1 由于