我为XML Lite库编写了一个小包装器,以便在我的MFC项目中使用它。我能使用这段代码吗?
CString GetValue()
{
const WCHAR* pwszValue = NULL;
UINT cwchValue = 0;
m_pReader->GetValue(&pwszValue, &cwchValue);
return CString(pwszValue);
}
我应该在GetValue方法签名中使用CString&参数吗?
不需要通过参数返回,这应该可以工作。
如果你担心效率问题,不用担心。在这种情况下,很可能会发生返回值优化。
如果您正在考虑效率,那么打开优化并进行测量。并且考虑是否对您有任何影响。几乎可以确定编译器将在此处执行返回值优化(RVO)。
但是作为一般规则,使用给您更多清晰代码的编码实践,即在这种情况下给出函数结果,从而提供更简洁、强大和易读的调用代码。
话虽如此,看起来您正在泄漏内存,并且匈牙利符号前缀不太容易阅读并降低了清晰度,因此即使您做出明智的决定并使用函数结果值,代码仍需要重新编写。
m_pReader->GetValue
存储在 pwszValue
中的静态分配字符串的地址是可能的,但这种情况有多大可能性呢? - Cheers and hth. - AlfCString&
会死得很惨,它返回的是一个临时引用,你的程序很快就会崩溃。
m_pReader
是什么?你遇到了什么错误? - Mihai Todor