CString から char*まで、 のReleaseBuffer()後に使用する必要がありますGetBuffer()。しかし、なぜ?ReleaseBuffer()afterを使用しないとどうなりGetBuffer()ますか?
誰かが私に例を示すことができますか? ありがとう。
CString から char*まで、 のReleaseBuffer()後に使用する必要がありますGetBuffer()。しかし、なぜ?ReleaseBuffer()afterを使用しないとどうなりGetBuffer()ますか?
誰かが私に例を示すことができますか? ありがとう。
これによりメモリ リークが発生するかどうかはわかりませんがReleaseBuffer、 のプライベート メンバーが確実にCString更新されるように呼び出す必要があります。たとえば、終了文字を探すことによってReleaseBufferの長さフィールドを更新します。CStringnull
ReleaseBuffer()afterを使用しないとどうなりGetBuffer()ますか?
私は MFC を使用したことがありません (そして、10 フィートの棒で触る必要がないことを願っています) が、経験則として、 と の両方を持つ API があるときはいつでもGetXXX()(ReleaseXXX()特に、GetXXX()便利な結果が取る型) -- 次に、すべてのReleaseXXX()呼び出しを呼び出すのを忘れると、.ReleaseXXX()GetXXX()XXX
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();