我对内存和指针有非常透彻的理解,但我需要稍微复习一下 C++ 在幕后如何管理某些对象。
考虑以下代码:
void Test()
{
LPCTSTR psz = (LPCTSTR)GetString();
}
CString GetString()
{
return CString(_T("abc"));
}
问题:
有人可以充实
GetString()
是如何返回一个本地对象并且它在调用者中仍然有效的吗?GetString()
的结果没有存储在任何地方,如何删除?psz
是否保证“安全”用于整个Test()
函数?
很抱歉在此示例中使用旧类,但这正是我现在正在使用的。
最佳答案
GetString
返回本地对象的拷贝(尽管实际复制可能被省略,本地临时对象直接返回)。GetString()
的返回值是一个临时值。与大多数临时变量一样,它会在完整表达式的末尾(本质上是在分号处)自动销毁。psz
获取指向由该临时对象管理的缓冲区的指针。一旦临时对象被销毁,psz
就会变成悬空状态。任何实际使用它的尝试都会表现出未定义的行为。
关于c++ - 当函数返回 CString 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42423326/