【问题标题】:C++ function when is the return value deleted?C++函数什么时候删除返回值?
【发布时间】:2025-11-26 18:30:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ string return-value lifetime temporary


    【解决方案1】:

    temporary 将在完整表达式后销毁。

    所有临时对象都作为评估完整表达式的最后一步被销毁,该完整表达式(词法上)包含创建它们的点,如果创建了多个临时对象,它们将按照与创建顺序相反的顺序被销毁.

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

    【讨论】:

      【解决方案2】:

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

      1. getName() 将被执行,它将返回字符串。

      2. c_str() 函数将使用上述返回字符串的引用。

      3. 最后printName会被执行,然后返回对象会被销毁,返回值不会在printName执行这个函数之前被销毁。

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

      【讨论】: