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

    10-12 21:21