17

CString から char*まで、 のReleaseBuffer()後に使用する必要がありますGetBuffer()。しかし、なぜ?ReleaseBuffer()afterを使用しないとどうなりGetBuffer()ますか?

誰かが私に例を示すことができますか? ありがとう。

4

4 に答える 4

11

これによりメモリ リークが発生するかどうかはわかりませんがReleaseBuffer、 のプライベート メンバーが確実にCString更新されるように呼び出す必要があります。たとえば、終了文字を探すことによってReleaseBufferの長さフィールドを更新します。CStringnull

于 2010-02-26T15:18:52.617 に答える
3

ReleaseBuffer()afterを使用しないとどうなりGetBuffer()ますか?

私は MFC を使用したことがありません (そして、10 フィートの棒で触る必要がないことを願っています) が、経験則として、 と の両方を持つ API があるときはいつでもGetXXX()(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 に答える