gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:11 24 4
gpt4 key购买 nike

我对内存和指针有非常透彻的理解,但我需要稍微复习一下 C++ 在幕后如何管理某些对象。

考虑以下代码:

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

CString GetString()
{
return CString(_T("abc"));
}

问题:

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

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

  3. psz 是否保证“安全”用于整个 Test() 函数?

很抱歉在此示例中使用旧类,但这正是我现在正在使用的。

最佳答案

  1. GetString 返回本地对象的拷贝(尽管实际复制可能被省略,本地临时对象直接返回)。

  2. GetString() 的返回值是一个临时值。与大多数临时变量一样,它会在完整表达式的末尾(本质上是在分号处)自动销毁。

  3. psz 获取指向由该临时对象管理的缓冲区的指针。一旦临时对象被销毁,psz 就会变成悬空状态。任何实际使用它的尝试都会表现出未定义的行为。

关于c++ - 当函数返回 CString 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42423326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com