【问题标题】: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。我将string 的c_str 指针传递给printName 函数。我想知道在调用printName() 函数之前是否会删除返回的string。如果不是,那么什么时候删除返回值。
【问题讨论】:
标签:
c++
string
return-value
lifetime
temporary
【解决方案1】:
temporary 将在完整表达式后销毁。
所有临时对象都作为评估完整表达式的最后一步被销毁,该完整表达式(词法上)包含创建它们的点,如果创建了多个临时对象,它们将按照与创建顺序相反的顺序被销毁.
getName() 创建的临时对象将在包含printName() 执行的完整表达式之后被销毁,从c_str 获得的指针在printName() 内部仍然有效。
【解决方案2】:
在给定的示例中,执行顺序是这样的
getName() 将被执行,它将返回字符串。
c_str() 函数将使用上述返回字符串的引用。
最后printName会被执行,然后返回对象会被销毁,返回值不会在printName执行这个函数之前被销毁。
因为完整的表达式将按词法顺序执行,临时创建的对象将在作用域结束后被销毁。