内存管理的原则为:谁申请,谁释放。
但是COM 从方便性和效率出发,采用的内存管理方式为:函数内部根据实际需要动态申请内存,而调用者负责释放。
COM中提供了三种内存分配释放函数:
BSTR | IMalloc接口 | COM库 | |
申请 | SysAllocString() | Alloc() | CoTaskMemAlloc() |
重新申请 | SysReAllocString() | Realloc() | CoTaskRealloc() |
释放 | SysFreeString() | Free() | CoTaskMemFree() |
1. CoTaskXXX( ) 函数族,其本质上就是调用C语言的库函数(malloc...);
2. IMalloc 接口是对 CoTaskXXX( ) 函数族的封装,同时增强了一些功能,比如:IMalloc::GetSize( ) 可以取得尺寸,使用 IMallocSpy 可以监视内存的使用;
例子:
1 BSTR pStr; 2 ProgIDFromCLSID(CLSID_MyStringFactory, &pStr);//函数内部申请空间 3 4 CoTaskMemFree(pStr);//释放空间
时间: 2024-11-09 00:02:07