Partilhar via


Implementação de um gerenciador de cadeia de caracteres personalizada (método básico)

A maneira mais fácil de personalizar o esquema de alocação de memória para dados de cadeia de caracteres é usar a classe CAtlStringMgr fornecida pela ATL, mas fornecer suas próprias rotinas de alocação de memória. O construtor para CAtlStringMgr usa um único parâmetro: um ponteiro para um objeto IAtlMemMgr. IAtlMemMgr é uma classe base abstrata que fornece uma interface genérica para um heap. Usando a interface IAtlMemMgr, o CAtlStringMgr aloca, realoca e libera a memória usada para armazenar dados de cadeia de caracteres. Você pode implementar a interface IAtlMemMgr por conta própria ou usar uma das cinco classes do gerenciador de memória fornecido pela ATL. Os gerenciadores de memória fornecidos pela ATL simplesmente encapsulam as instalações de alocação de memória existentes:

Para fins de gerenciamento de memória de cadeia de caracteres, a classe mais útil é CWin32Heap porque permite que você crie vários heaps independentes. Por exemplo, se você quisesse usar um heap separado apenas para cadeias de caracteres, poderia fazer o seguinte:

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

Para usar esse gerenciador de cadeia de caracteres privado para gerenciar a memória de uma variável CString, passe um ponteiro para o gerenciador como um parâmetro para o construtor da variável 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;
   }
}

Confira também

Gerenciamento de memória com CStringT