Mr.*_*C64 5 c++ string mfc atl
根据CString的MSDN文档,GetBufferSetLength()对该方法的调用之后应该匹配调用ReleaseBuffer().
但是,在同一页面的示例代码中,注释表明调用ReleaseBuffer()是不必要的:
Run Code Online (Sandbox Code Playgroud)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);
因此,应该纠正代码调用ReleaseBuffer()后GetBufferSetLength(),或者是呼叫不必要的?
编辑
根据我做过的一些测试,之后听起来像是ReleaseBuffer()不必要的GetBufferSetLength(),但是:
目的ReleaseBuffer是将缓冲区包含的 C 风格字符串的状态与CString内部变量的状态同步。据推测,这只是获取最终的字符串长度并将其存储在内部,如果存在较大差异,可能会重新分配缓冲区。
在本例中,字符串长度被指定为 3 个字符。由于字符串的大小不会通过缓冲区的操作而改变,因此无需在操作后更新长度。
| 归档时间: |
|
| 查看次数: |
736 次 |
| 最近记录: |