CString作为返回值

时间:2012-07-29 19:48:20

标签: c++ mfc

我为XML Lite库编写了一个小包装器,以便在我的MFC项目中使用它。我可以使用这段代码吗?

CString GetValue()
{
    const WCHAR* pwszValue = NULL;
    UINT cwchValue = 0;

    m_pReader->GetValue(&pwszValue, &cwchValue);

    return CString(pwszValue);
}

或者说我使用CString& GetValue方法签名中的参数?

3 个答案:

答案 0 :(得分:3)

没有必要通过参数返回,这应该工作。

如果您担心效率,请不要。在这种情况下,很可能会出现返回值优化。

答案 1 :(得分:1)

如果您正在考虑效率,请启用优化并衡量。并考虑差异(如果有的话)对您是否重要。几乎可以肯定编译器会在这里进行返回值优化(RVO)。

但作为一般规则,使用编码实践为您提供更多 clear 代码,即在本例中为函数结果,它提供更简洁,健壮和可读的调用代码。

也就是说,看起来你正在为pwszValue 泄漏内存,匈牙利符号前缀不是完全可读并且降低了清晰度,所以代码需要一些修改即使你做了明智的事情并使用功能结果值。

答案 2 :(得分:0)

CString&会出错,返回对临时的引用,你的程序会很快崩溃。