Partager via


Implémentation d’un gestionnaire de chaînes personnalisé (méthode élémentaire)

Le moyen le plus simple de personnaliser le schéma d’allocation de mémoire pour les données de chaîne consiste à utiliser la classe fournie par CAtlStringMgr ATL, mais à fournir vos propres routines d’allocation de mémoire. Le constructeur prend CAtlStringMgr un paramètre unique : un pointeur vers un IAtlMemMgr objet. IAtlMemMgr est une classe de base abstraite qui fournit une interface générique à un tas. À l’aide de l’interface IAtlMemMgr , l’allocation CAtlStringMgr , la réalloue et libère la mémoire utilisée pour stocker les données de chaîne. Vous pouvez implémenter l’interface IAtlMemMgr vous-même ou utiliser l’une des cinq classes de gestionnaire de mémoire fournies par ATL. Les gestionnaires de mémoire fournis par ATL encapsulent simplement les installations d’allocation de mémoire existantes :

Dans le cadre de la gestion de la mémoire de chaîne, la classe la plus utile est CWin32Heap parce qu’elle vous permet de créer plusieurs tas indépendants. Par exemple, si vous souhaitez utiliser un tas distinct 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 la mémoire d’une CString variable, transmettez un pointeur au gestionnaire en tant que paramètre au constructeur de la CString variable :

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

Gestion de la mémoire avec CStringT