当功能返回CSTRING时会发生什么

What happens when a function returns a CString?

本文关键字:什么 功能 返回 CSTRING      更新时间:2023-10-16

我对记忆和指针有一个非常透彻的理解,但是我需要对C 确切地管理封面中的某些对象进行一些回修。

考虑以下代码:

void Test()
{
    LPCTSTR psz = (LPCTSTR)GetString();
}
CString GetString()
{
    return CString(_T("abc"));
}

问题:

  1. 有人可以充实GetString()如何返回本地对象,并且在呼叫者中仍然有效?

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

  3. psz是否可以保证在Test()功能中使用"安全"?

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

  1. GetString返回本地对象的副本(尽管可以省略实际复制,并且直接返回了本地临时)。

  2. GetString()的返回值是临时的。像大多数临时性一样,它在完整表达的末尾自动被破坏(本质上是在半隆)。

  3. psz获取由该临时性管理的缓冲区指针。一旦临时销毁,psz就会悬挂。任何实际使用它的尝试都会表现出不确定的行为。