我对内存和指针有一个非常全面的了解,但是我需要对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/