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