从CString 到 char*,ReleaseBuffer()必须在GetBuffer(). 但为什么?如果我不使用ReleaseBuffer()after会发生什么GetBuffer()?
有人可以给我举个例子吗?谢谢。
从CString 到 char*,ReleaseBuffer()必须在GetBuffer(). 但为什么?如果我不使用ReleaseBuffer()after会发生什么GetBuffer()?
有人可以给我举个例子吗?谢谢。
我不确定这会导致内存泄漏,但您必须调用ReleaseBuffer以确保CString更新 的私有成员。例如,ReleaseBuffer将CString通过查找终止null字符来更新 的长度字段。
如果我不使用
ReleaseBuffer()after会发生什么GetBuffer()?
我没有使用过 MFC(希望永远不必用 10 英尺长的杆子触摸它),但是根据经验,只要你有一个同时具有两者的 APIGetXXX()并且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();
如果不使用 GetBuffer() 获得的指针修改 CString 的内容,则之后不需要调用 ReleaseBuffer()