当一个函数 returns 一个 CString 时会发生什么?

What happens when a function returns a CString?

我对内存和指针有非常透彻的了解,但我需要稍微复习一下 C++ 在幕后如何管理某些对象。

考虑以下代码:

void Test()
{
    LPCTSTR psz = (LPCTSTR)GetString();
}

CString GetString()
{
    return CString(_T("abc"));
}

问题:

  1. 有人可以充实 GetString() 如何 return 本地对象并且它在调用者中仍然有效吗?

  2. 由于GetString()的结果没有存储在任何地方,如何删除?

  3. psz 是否保证 "safe" 用于整个 Test() 函数?

很抱歉在此示例中使用旧的 类,但这正是我现在正在使用的。

  1. GetString returns 一个本地对象的副本(虽然实际的复制可能被省略,本地临时 return 直接编辑)。

  2. GetString()的return值是临时的。像大多数临时变量一样,它会在完整表达式的末尾自动销毁(本质上是在分号处)。

  3. psz 获取指向由该临时管理的缓冲区的指针。一旦临时对象被销毁,psz 就会变成悬空状态。任何实际使用它的尝试都会表现出未定义的行为。