Partager via


Implémentation d'un gestionnaire de chaînes personnalisé (méthode de base)

La façon la plus facile de personnaliser le modèle d'allocation de mémoire pour les données de chaîne est d'utiliser ATL a fourni la classe de CAtlStringMgr mais fournit vos propres routines d'allocation de mémoire. Le constructeur pour CAtlStringMgr prend un paramètre unique : un pointeur vers un objet d' IAtlMemMgr . IAtlMemMgr est une classe de base abstraite qui fournit une interface générique à un tas. À l'aide de l'interface d' IAtlMemMgr , CAtlStringMgr alloue, réaffecte, et libère la mémoire utilisée pour stocker des données de chaîne. Vous pouvez soit implémenter l'interface d' IAtlMemMgr vous-même, ou utiliser l'un des cinq ATL fournissait des classes de gestionnaire de mémoire. ATL a fourni les fonctions existants d'allocation de mémoire d'enveloppe de gestionnaires de mémoire uniquement :

Pour les besoins de la gestion de la mémoire de chaîne, la classe très utile est CWin32Heap car elle vous permet de créer des tas multiples d'un. Par exemple, si vous voulez utiliser un tas séparé uniquement pour les chaînes, vous pouvez effectuer les opérations suivantes :

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

Pour utiliser ce gestionnaire de chaînes privé pour gérer le stockage d'une variable d' CString , passez un pointeur vers le gestionnaire comme paramètre au constructeur de la variable d' CString :

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

Voir aussi

Concepts

Gestion de la mémoire avec CStringT