Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对函数返回的临时对象调用成员函数是否安全(在函数返回后)?_C++ - Fatal编程技术网

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
,而是由返回值创建的文件