Sdílet prostřednictvím


Implementace vlastního správce řetězců (základní způsob)

Nejjednodušší způsob, jak přizpůsobit schéma přidělování paměti pro řetězcová data, je použít třídu poskytovanou CAtlStringMgr atL, ale poskytnout vlastní rutiny přidělování paměti. Konstruktor pro CAtlStringMgr přebírá jeden parametr: ukazatel na IAtlMemMgr objekt. IAtlMemMgr je abstraktní základní třída, která poskytuje obecné rozhraní haldy. IAtlMemMgr Pomocí rozhraní CAtlStringMgr přidělí, relokuje a uvolní paměť použitou k ukládání řetězcových dat. Buď můžete implementovat IAtlMemMgr rozhraní sami, nebo použít jednu z pěti tříd správce paměti poskytované ATL. Správci paměti poskytované ATL jednoduše zabalí stávající zařízení přidělení paměti:

Pro účely správy paměti řetězců je nejužitečnější třída CWin32Heap , protože umožňuje vytvořit více nezávislých hald. Pokud byste například chtěli použít samostatnou haldu jenom pro řetězce, můžete udělat toto:

// 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); 

Pokud chcete použít tohoto správce privátních řetězců ke správě paměti pro proměnnou CString , předejte správci ukazatel jako parametr konstruktoru CString proměnné:

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

Viz také

Správa paměti pomocí CStringT