17

CString 到 char*ReleaseBuffer()必须在GetBuffer(). 但为什么?如果我不使用ReleaseBuffer()after会发生什么GetBuffer()

有人可以给我举个例子吗?谢谢。

4

4 回答 4

11

我不确定这会导致内存泄漏,但您必须调用ReleaseBuffer以确保CString更新 的私有成员。例如,ReleaseBufferCString通过查找终止null字符来更新 的长度字段。

于 2010-02-26T15:18:52.617 回答
3

如果我不使用ReleaseBuffer()after会发生什么GetBuffer()

我没有使用过 MFC(希望永远不必用 10 英尺长的杆子触摸它),但是根据经验,只要你有一个同时具有两者的 APIGetXXX()并且ReleaseXXX()(尤其是当GetXXX()方便的结果是需要的类型ReleaseXXX())——那么当你忘记为你ReleaseXXX()的每一个GetXXX()电话打电话时,你会泄漏一个XXX.

于 2010-02-26T15:32:14.633 回答
0

CString::GetBuffer()这是我如何使用and的示例CString::ReleaseBuffer()

LPTSTR pUnitBuffer = pAPBElement->m_strUnits.GetBuffer(APB_UNIT_SIZE);
if (pUnitBuffer != "")
{
   if (strncmp(pAPBElement->m_strUnits, (char*)pszBuffer[nLoop - nFirst], APB_UNIT_SIZE) != 0)
   {    
     LPTSTR pUnitOriginal = pAPBElement->m_strOriginal.GetBuffer(APB_UNIT_SIZE);

     strncpy(pUnitBuffer, 
            (char*)&pszBuffer[nLoop - nFirst], 
            APB_UNIT_SIZE);

     strncpy(pUnitOriginal, 
            (char*)&pszBuffer[nLoop - nFirst], 
            APB_UNIT_SIZE);

     pAPBElement->m_strOriginal.ReleaseBuffer();
    }
}
pAPBElement->m_strUnits.ReleaseBuffer();
于 2012-03-01T18:40:15.940 回答
0

如果不使用 GetBuffer() 获得的指针修改 CString 的内容,则之后不需要调用 ReleaseBuffer()

于 2019-06-19T02:16:35.053 回答