繁体   English   中英

C++ function 什么时候删除返回值?

[英]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 我将stringc_str指针传递给printName function。 我想知道在调用printName() function 之前是否会删除返回的string 如果不是,那么何时删除返回的值。

完整表达后临时将被销毁。

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

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

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

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

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

  3. 最后printName将被执行,然后 return object 将被销毁,在此 function 执行printName之前,返回值不会被销毁。

由于完整的表达式将按词法顺序执行,临时创建的对象将在 scope 结束后被销毁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM