当函数返回CString时会发生什么?

Jon*_*ood 2 c++ mfc object-lifetime visual-c++

我对内存和指针有一个非常透彻的理解,但我需要对C++管理一些对象的确切方法进行一些复习.

请考虑以下代码:

void Test()
{
    LPCTSTR psz = (LPCTSTR)GetString();
}

CString GetString()
{
    return CString(_T("abc"));
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 有人可以充实了如何GetString()返回本地对象并且它仍然在调用者中有效吗?

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

  3. psz保证"安全"使用的的全部Test()功能?

很抱歉在这个例子中使用旧类,但这就是我现在正在使用的.

Igo*_*nik 7

  1. GetString 返回本地对象的副本(虽然可以省略实际的复制,并直接返回本地临时).

  2. 返回值GetString()是暂时的.像大多数临时演员一样,它会在完整表达结束时自动销毁(基本上是分号).

  3. psz获取指向该临时管理的缓冲区的指针.一旦临时被摧毁,psz就会变得晃来晃去.任何实际使用它的尝试都会表现出未定义的行为.

  • 是的,没关系,只要`DoSomething()`不会尝试挂在函数调用之外的指针上. (2认同)