CMemFile::Detach
BYTE* Detach( );
返回值:
返回一个指向包含内存文件内容的内存块指针。
说明:
调用该函数,以获取CMemFile使用的内存块的指针。
调用该函数也关闭了CMemFile。需要调用Attach重新为CMemFile附加内存块。如果希望重新附加该文件,并使用其数据,那么在调用Detach函数之前,应当调用CFile::GetLength以获取文件的长度。要注意的是如果已经为CMemFile附加了内存块,这样就可以使用其数据(nGrowBytes == 0),同样,也不能增大内存文件。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转到CMemFile::Detach的源码:
BYTE* CMemFile::Detach()
{
BYTE* lpBuffer = m_lpBuffer;
m_lpBuffer = NULL;
m_nFileSize = 0;
m_nBufferSize = 0;
m_nPosition = 0;
return lpBuffer;
}
显然这里申请的内存指针直接交给用户了,CMemFile对象也基本无用了,所以要手动释放,即:
BYTE* pbBuff= (BYTE*)new char [1024];memset(pbBuff, 0, 1024);
memcpy(pbBuff, "hello", sizeof("hello"));
CMemFile mf;
mf.SeekToEnd();
mf.Write(pbBuff,1024);
delete[] pbBuff;
BYTE* lpBuffer = mf.Detach();
CString strSocket(lpBuffer);
free(lpBuffer);//CMemFile的内存使用malloc申请的