从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()