当一个函数 returns 一个 CString 时会发生什么?
What happens when a function returns a CString?
我对内存和指针有非常透彻的了解,但我需要稍微复习一下 C++ 在幕后如何管理某些对象。
考虑以下代码:
void Test()
{
LPCTSTR psz = (LPCTSTR)GetString();
}
CString GetString()
{
return CString(_T("abc"));
}
问题:
有人可以充实 GetString()
如何 return 本地对象并且它在调用者中仍然有效吗?
由于GetString()
的结果没有存储在任何地方,如何删除?
psz
是否保证 "safe" 用于整个 Test()
函数?
很抱歉在此示例中使用旧的 类,但这正是我现在正在使用的。
GetString
returns 一个本地对象的副本(虽然实际的复制可能被省略,本地临时 return 直接编辑)。
GetString()
的return值是临时的。像大多数临时变量一样,它会在完整表达式的末尾自动销毁(本质上是在分号处)。
psz
获取指向由该临时管理的缓冲区的指针。一旦临时对象被销毁,psz
就会变成悬空状态。任何实际使用它的尝试都会表现出未定义的行为。
我对内存和指针有非常透彻的了解,但我需要稍微复习一下 C++ 在幕后如何管理某些对象。
考虑以下代码:
void Test()
{
LPCTSTR psz = (LPCTSTR)GetString();
}
CString GetString()
{
return CString(_T("abc"));
}
问题:
有人可以充实
GetString()
如何 return 本地对象并且它在调用者中仍然有效吗?由于
GetString()
的结果没有存储在任何地方,如何删除?psz
是否保证 "safe" 用于整个Test()
函数?
很抱歉在此示例中使用旧的 类,但这正是我现在正在使用的。
GetString
returns 一个本地对象的副本(虽然实际的复制可能被省略,本地临时 return 直接编辑)。GetString()
的return值是临时的。像大多数临时变量一样,它会在完整表达式的末尾自动销毁(本质上是在分号处)。psz
获取指向由该临时管理的缓冲区的指针。一旦临时对象被销毁,psz
就会变成悬空状态。任何实际使用它的尝试都会表现出未定义的行为。