Implementatie van een aangepast tekenreeksbeheer (basismethode)

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:

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;
   }
}

Zie ook

Geheugenbeheer met CStringT