C++函数何时删除返回值?
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());
}
函数getName
返回一个string
。我正在将string
的c_str
指针传递给printName
函数。我想知道在调用printName()
函数之前是否会删除返回的string
。如果不是,则何时删除返回值。
临时将在完整表达式后销毁。
所有临时对象都将作为计算完整表达式的最后一步销毁,该表达式(以词法方式(包含创建它们的点,如果创建了多个临时对象,则按与创建顺序相反的顺序销毁它们。
getName()
创建的临时表达式将在包括执行printName()
的完整表达式后销毁,从c_str
获得的指针在printName()
内仍然有效。
在给定的示例中,执行序列如下所示
-
getName()
将被执行,它将返回字符串。 -
c_str()
函数将使用上述返回字符串的引用。 -
最后
printName
将被执行,然后返回对象将被销毁,返回值不会在printName
执行此函数之前被销毁。
由于完整表达式将按词法顺序执行,临时创建的对象将在范围结束后销毁。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 如何删除新分配的字符,这也是函数返回值?
- C++函数何时删除返回值?
- 使用模板返回值从函数中删除类型
- unique_ptr具有右值删除器的构造函数返回 null
- 从捕获 constexpr 函数返回值的变量中删除 constexpr 会删除编译时计算
- 删除返回值后的指针
- 如何删除在函数中创建并作为返回值的指针
- 如何指示需要删除返回值