首页 > 解决方案 > 没有大小参数的 CString::GetBuffer() 有什么作用?

问题描述

也许我要疯了,但我已经尝试了我能想到的所有搜索组合,但我找不到CString::GetBuffer()没有参数的定义。我查找的每个参考资料都描述了CString::GetBuffer( int ),其中int传入的参数是最大缓冲区长度。标题中的定义是 for CSimpleStringT::GetBuffer()。这给了我以下链接,它至少承认无参数版本的存在,但没有提供其行为的描述。 https://msdn.microsoft.com/en-us/library/sddk80xf.aspx#csimplestringt__getbuffer

我正在查看现有的 C++ (Visual Studio) 代码,如果不需要,我不想更改,但我需要知道CString::GetBuffer(). 如果有人可以解释它或向我指出一些关于它的文档,我将不胜感激。

标签: c++mfc

解决方案


尽管 msdn 文档并没有真正说明GetBuffer没有参数的情况,但 MFC 源代码揭示了答案:

return( m_pszData );

所以它只是返回一个指向底层字符缓冲区的指针。(它还检查内部数据是否共享并首先分叉/复制它)。

代码在 atlsimpstr.h

功能齐全:

PXSTR GetBuffer()
{
    CStringData* pData = GetData();
    if( pData->IsShared() )
    {
        Fork( pData->nDataLength );
    }

    return( m_pszData );
}

推荐阅读