사용자 지정 문자열 관리자 구현 (기본 방법)
문자열 데이터 사용 하는 ATL에서 제공 하는 것에 대 한 메모리 할당 구성표를 사용자 지정 하는 가장 쉬운 방법은 CAtlStringMgr 클래스 있지만 자신의 메모리 할당 루틴을 제공 합니다.생성자에 대 한 CAtlStringMgr 매개 변수가 하나:에 대 한 포인터는 IAtlMemMgr 개체입니다.IAtlMemMgr힙 하는 제네릭 인터페이스를 제공 하는 추상 기본 클래스가입니다.사용 하는 IAtlMemMgr 인터페이스는 CAtlStringMgr 할당 및 다시 할당에서 문자열 데이터를 저장 하는 데 사용 된 메모리를 해제 합니다.어느 구현할 수는 IAtlMemMgr 인터페이스를 직접 또는 5 ATL에서 제공 하는 메모리 관리자 클래스 중 하나를 사용 합니다.ATL에서 제공 하는 메모리 관리자는 단순히 기존 메모리 할당 기능을 래핑합니다.
CWin32HeapWin32 힙 핸들을 사용 하 여 래핑합니다 HeapAlloc, HeapFree, 및 HeapRealloc
CLocalHeapWin32 Api 줄 바꿈: LocalAlloc, LocalFree, 및 LocalRealloc
CGlobalHeapWin32 Api 줄 바꿈: GlobalAlloc, GlobalFree, 및 GlobalRealloc.
CComHeapCOM 작업 할당자 Api 줄 바꿈: CoTaskMemAlloc, CoTaskMemFree, 및 CoTaskMemRealloc
문자열 메모리 관리를 위해 가장 유용한 클래스인 CWin32Heap 여러 독립 힙을 만들 수 있기 때문에.예를 들어, 문자열을 위한 별도 힙을 사용 하려는 경우 다음을 수행 하지 못했습니다.
// Declare a thread-safe, growable, private heap with initial size 0:
CWin32Heap g_stringHeap(0, 0, 0);
// Declare a string manager that uses the private heap:
CAtlStringMgr g_stringMgr(&g_stringHeap);
이 개인 문자열 관리자에 대 한 메모리 관리를 사용 하는 CString 관리자 매개 변수로 전달 포인터 변수는 CString 변수의 생성자:
void PrintPowers(int nBase)
{
int n = 1;
for(int nPower = 0; nPower < 10; nPower++)
{
// Use the private string manager, instead of the default:
CString strPower(&g_stringMgr);
strPower.Format(_T("%d"), n);
_tprintf_s(_T("%s\n"), strPower);
n *= nBase;
}
}