[英]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());
}
function getName
返回一个string
。 我将string
的c_str
指针传递给printName
function。 我想知道在调用printName()
function 之前是否会删除返回的string
。 如果不是,那么何时删除返回的值。
完整表达后临时将被销毁。
作为评估完整表达式的最后一步,所有临时对象都被销毁,该完整表达式(词法上)包含创建它们的点,如果创建了多个临时对象,它们将按照与创建顺序相反的顺序被销毁。
getName()
创建的临时变量将在包含printName()
执行的完整表达式之后被销毁,从c_str
获得的指针在printName()
内部仍然有效。
在给定的示例中,执行顺序是这样的
getName()
将被执行,它将返回字符串。
c_str()
function 将使用上述返回字符串的引用。
最后printName
将被执行,然后 return object 将被销毁,在此 function 执行printName
之前,返回值不会被销毁。
由于完整的表达式将按词法顺序执行,临时创建的对象将在 scope 结束后被销毁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.