Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) en de Active Template Library (ATL) worden nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
De eenvoudigste manier om het schema voor geheugentoewijzing voor tekenreeksgegevens aan te passen, is door de door ATL geleverde CAtlStringMgr klasse te gebruiken, maar uw eigen geheugentoewijzingsroutines te bieden. De constructor voor het CAtlStringMgr gebruik van één parameter: een aanwijzer naar een IAtlMemMgr object.
IAtlMemMgr is een abstracte basisklasse die een algemene interface biedt voor een heap. Met behulp van de IAtlMemMgr interface wordt het CAtlStringMgr geheugen dat wordt gebruikt voor het opslaan van tekenreeksgegevens toegewezen, opnieuw toegewezen en vrijgemaakt. U kunt de IAtlMemMgr interface zelf implementeren of een van de vijf door ATL geleverde geheugenbeheerklassen gebruiken. De door ATL geleverde geheugenbeheerders verpakken eenvoudig bestaande geheugentoewijzingsfaciliteiten:
CCRTHeap Verpakt de standaard CRT-heap-functies (malloc, gratis en realloc)
CWin32Heap Verpakt een Win32 heap handvat, met behulp van HeapAlloc, HeapFree en HeapRealloc
CLocalHeap Verpakt de Win32-API's: LocalAlloc, LocalFree en LocalRealloc
CGlobalHeap Verpakt de Win32-API's: GlobalAlloc, GlobalFree en GlobalRealloc.
CComHeap Verpakt de COM Task Allocator-API's: CoTaskMemAlloc, CoTaskMemFree en CoTaskMemRealloc
Voor tekenreeksgeheugenbeheer is CWin32Heap de handigste klasse omdat u hiermee meerdere onafhankelijke heaps kunt maken. Als u bijvoorbeeld een afzonderlijke heap wilt gebruiken voor tekenreeksen, kunt u het volgende doen:
// 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);
Als u deze privéreeksbeheerder wilt gebruiken om het geheugen voor een CString variabele te beheren, geeft u een aanwijzer als parameter door aan de constructor van de CString variabele:
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;
}
}