gpt4 book ai didi

c++ - CString 的 GetBufferSetLength() 是否应该有一个匹配的 ReleaseBuffer() 调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:03 26 4
gpt4 key购买 nike

根据 CString 的 GetBufferSetLength() 的 MSDN 文档,对该方法的调用之后应该是对 ReleaseBuffer() 的匹配调用。

但是,在同一页面的示例代码中,注释指出调用 ReleaseBuffer()不必要的:

CSimpleString str(pMgr);
LPTSTR pstr = str.GetBufferSetLength(3);
pstr[0] = _T('C');
pstr[1] = _T('u');
pstr[2] = _T('p');

// No need for trailing zero or call to ReleaseBuffer()
// because GetBufferSetLength() set it for us.

str += _T(" soccer is best!");
ASSERT(_tcscmp(str, _T("Cup soccer is best!")) == 0);

因此,应该在 GetBufferSetLength() 之后更正代码调用 ReleaseBuffer(),还是不需要调用?

最佳答案

ReleaseBuffer 的目的是同步缓冲区包含的 C 风格字符串的状态与 CString 内部变量的状态。据推测,这只是获取最终的字符串长度并将其存储在内部,如果差异很大,可能会重新分配缓冲区。

在示例的情况下,字符串长度规定为正好 3 个字符。由于字符串的大小不会通过缓冲区的操作而改变,因此无需在操作后更新长度。

关于c++ - CString 的 GetBufferSetLength() 是否应该有一个匹配的 ReleaseBuffer() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275259/

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