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

标签 c++ string mfc atl

根据 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/

相关文章:

c++ - 如何将二维数组作为参数传递?

c++ - 如何减去两个 LIFETIME?

python - 如何在python中将numpy数组成员的值写入txt?

连接 char 数组和 char

r - stringr:从字符串中删除圆括号和方括号

c++ - 自移动 std::string 是否可移植?

c++ - 当要测试的类很复杂时,如何编写单元测试?

c++ - 在 MFC 中显示 unicode 字符串

c++ - 是否可以创建一个由透明浏览器组件组成的无窗口 mfc c++ 应用程序?

c++ - 旧版 MFC 代码 (2005) 无法在 VC 2010 上编译