C++函数什么时候删除return值?

C++ function when is the return value deleted?

我在 C++ 中有以下代码。

string getName()
{
    return "C++";
}

void printName(const char* name)
{
    cout << name << endl;
}

int main()
{
    printName(getName().c_str());
}

函数getNamereturns一个string。我将 stringc_str 指针传递给 printName 函数。我想知道在调用 printName() 函数之前,返回的 string 是否会被删除。如果不是那么什么时候删除返回值。

temporary表达式完整后会被销毁

All temporary objects are destroyed as the last step in evaluating the full-expression that (lexically) contains the point where they were created, and if multiple temporary objects were created, they are destroyed in the order opposite to the order of creation.

getName()创建的临时文件将在包含printName()执行的完整表达式后被销毁,从c_str获得的指针在printName()中仍然有效。

在给定的示例中,执行顺序是这样的

  1. getName() 将执行它 return 字符串。

  2. 上面return字符串的引用将被c_str()函数使用。

  3. 最后printName会被执行,然后return对象会被销毁,return值不会在printName执行之前被销毁功能。

因为完整的表达式将按词法顺序执行,临时创建的对象将在作用域结束后被销毁。