Udostępnij za pośrednictwem


Wdrożenie niestandardowego menedżera ciągów (metoda podstawowa)

Najprostszym sposobem dostosowania schematu alokacji pamięci dla danych ciągów jest użycie klasy atl udostępnionej CAtlStringMgr , ale zapewnienie własnych procedur alokacji pamięci. Konstruktor dla CAtlStringMgr przyjmuje pojedynczy parametr: wskaźnik do IAtlMemMgr obiektu. IAtlMemMgr jest abstrakcyjną klasą bazową, która udostępnia ogólny interfejs sterta. Za pomocą interfejsu IAtlMemMgrCAtlStringMgr przydziela, alokuje i zwalnia pamięć używaną do przechowywania danych ciągów. Interfejs można zaimplementować IAtlMemMgr samodzielnie lub użyć jednej z pięciu klas menedżera pamięci dostarczonej przez usługę ATL. Menedżery pamięci dostarczone przez atL po prostu opakowuje istniejące obiekty alokacji pamięci:

W celu zarządzania pamięcią ciągów najbardziej przydatna jest CWin32Heap klasa, ponieważ umożliwia tworzenie wielu niezależnych stert. Jeśli na przykład chcesz użyć oddzielnego sterta tylko dla ciągów, możesz wykonać 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); 

Aby użyć tego prywatnego menedżera ciągów do zarządzania pamięcią CString dla zmiennej, przekaż wskaźnik do menedżera jako parametr CString do konstruktora zmiennej:

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

Zobacz też

Zarządzanie pamięcią za pomocą CStringT