Wdrożenia z Menedżera ciąg niestandardowy (metoda podstawowe)
Najprostszym sposobem dostosowywania systemu alokacji pamięci dla danych string jest użycie ATL dostarczonych CAtlStringMgr klasy, ale zapewnia pamięci własnych procedur alokacji.Konstruktor CAtlStringMgr przyjmuje jeden parametr: wskaźnik do IAtlMemMgr obiektu.IAtlMemMgrto abstrakcyjna klasa podstawowa, który udostępnia interfejs generic do sterty.Za pomocą IAtlMemMgr interfejsu, CAtlStringMgr przydziela, reallocates i zwalnia pamięć używaną do przechowywania danych string.Można albo wdrożenie IAtlMemMgr interfejsu samodzielnie lub użyć pięć klas Menedżera pamięci ATL-warunkiem.Menedżerowie pamięci dostarczonych ATL Zawijaj po prostu istniejących urządzeń alokacji pamięci:
CCRTHeapZawija standardowe funkcje sterty CRT (malloc, wolnego, i realloc)
CWin32HeapOtacza uchwyt sterty Win32, za pomocą HeapAlloc, HeapFree, i Funkcja HeapRealloc
CLocalHeapZawija API Win32: LocalAlloc, funkcji LocalFree, i LocalRealloc
CGlobalHeapZawija API Win32: GlobalAlloc, GlobalFree, i GlobalRealloc.
CComHeapZawija przydzielania zadań COM API: CoTaskMemAlloc, CoTaskMemFree, i CoTaskMemRealloc
Do zarządzania pamięcią ciąg, jest najbardziej użyteczna klasy CWin32Heap , ponieważ umożliwia tworzenie wielu stert niezależnych.Na przykład jeśli chcemy używać oddzielnej sterty dla ciągów może wykonaj następujące czynności:
// 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);
Za pomocą Menedżera ten ciąg prywatnej pamięci dla zarządzania CString zmienna przebiegu wskaźnik do Menedżera jako parametr do CString zmiennej konstruktora:
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;
}
}