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 由於