来自CString to char*,必须在ReleaseBuffer()
之后使用GetBuffer()
。但为什么?如果我在ReleaseBuffer()
之后不使用GetBuffer()
会怎样?
有人能告诉我一个例子吗?感谢。
答案 0 :(得分:11)
我不确定这是否会导致内存泄漏,但您必须致电ReleaseBuffer
以确保更新CString
的私有成员。例如,ReleaseBuffer
会通过查找终止CString
字符来更新null
的长度字段。
答案 1 :(得分:3)
如果我在
ReleaseBuffer()
之后不使用GetBuffer()
会怎样?
我没有使用过MFC(并且希望不会用10英尺的杆子来触摸它)但是,根据经验,只要你的API同时具有GetXXX()
和{ {1}}(特别是当ReleaseXXX()
的结果方便地属于GetXXX()
所采用的类型时) - 然后当您忘记为每个ReleaseXXX()
致电ReleaseXXX()
时}调用,你会泄漏GetXXX()
。
答案 2 :(得分:0)
以下是我使用CString::GetBuffer()
和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();
答案 3 :(得分:0)
如果您不使用通过GetBuffer()获得的指针来修改CString的内容,则此后无需调用ReleaseBuffer()