경우에 따라 메서드는 힙에 메모리 버퍼를 할당하고 버퍼의 주소를 호출자에게 반환합니다. COM은 힙에서 메모리를 할당하고 해제하기 위한 함수 쌍을 정의합니다.
- CoTaskMemAlloc 함수는 메모리 블록을 할당합니다.
- CoTaskMemFree 함수는 CoTaskMemAlloc할당된 메모리 블록을 해제합니다.
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
GetDisplayName 메서드는 문자열에 대한 메모리를 할당합니다. 내부적으로 메서드는 CoTaskMemAlloc 호출하여 문자열을 할당합니다. 메서드가 반환되면 pszFilePath 새 버퍼의 메모리 위치를 가리킵니다. 호출자는 CoTaskMemFree 호출하여 메모리를 해제할 책임이 있습니다.
COM에서 자체 메모리 할당 함수를 정의하는 이유는 무엇인가요? 한 가지 이유는 힙 할당자에 추상화 계층을 제공하기 위해서입니다. 그렇지 않으면 일부 메서드는 malloc 호출하고 다른 메서드는 새호출할 수 있습니다. 그런 다음 프로그램이 어떤 경우에는 무료 호출하고 다른 삭제해야하며, 모든 것을 추적하는 것은 빠르게 불가능해질 것입니다. COM 할당 함수는 균일한 접근 방식을 만듭니다.
또 다른 고려 사항은 COM이 이진 표준이므로 특정 프로그래밍 언어에 연결되지 않는다는 사실입니다. 따라서 COM은 언어별 메모리 할당 형식을 사용할 수 없습니다.
다음