我为XML Lite库编写了一个小包装器,以便在我的MFC项目中使用它。我可以使用这段代码吗?
CString GetValue()
{
const WCHAR* pwszValue = NULL;
UINT cwchValue = 0;
m_pReader->GetValue(&pwszValue, &cwchValue);
return CString(pwszValue);
}
或者说我使用CString& GetValue方法签名中的参数?
答案 0 :(得分:3)
没有必要通过参数返回,这应该工作。
如果您担心效率,请不要。在这种情况下,很可能会出现返回值优化。
答案 1 :(得分:1)
如果您正在考虑效率,请启用优化并衡量。并考虑差异(如果有的话)对您是否重要。几乎可以肯定编译器会在这里进行返回值优化(RVO)。
但作为一般规则,使用编码实践为您提供更多 clear 代码,即在本例中为函数结果,它提供更简洁,健壮和可读的调用代码。
也就是说,看起来你正在为pwszValue
泄漏内存,匈牙利符号前缀不是完全可读并且降低了清晰度,所以代码需要一些修改即使你做了明智的事情并使用功能结果值。
答案 2 :(得分:0)
CString&
会出错,返回对临时的引用,你的程序会很快崩溃。