CString から char*まで、 のReleaseBuffer()
後に使用する必要がありますGetBuffer()
。しかし、なぜ?ReleaseBuffer()
afterを使用しないとどうなりGetBuffer()
ますか?
誰かが私に例を示すことができますか? ありがとう。
CString から char*まで、 のReleaseBuffer()
後に使用する必要がありますGetBuffer()
。しかし、なぜ?ReleaseBuffer()
afterを使用しないとどうなりGetBuffer()
ますか?
誰かが私に例を示すことができますか? ありがとう。
これによりメモリ リークが発生するかどうかはわかりませんがReleaseBuffer
、 のプライベート メンバーが確実にCString
更新されるように呼び出す必要があります。たとえば、終了文字を探すことによってReleaseBuffer
の長さフィールドを更新します。CString
null
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();