Condividi tramite


Implementazione di una gestione stringhe personalizzata (metodo di base)

Il modo più semplice per personalizzare lo schema di allocazione della memoria per i dati stringa consiste nell'usare la classe fornita da CAtlStringMgr ATL, ma fornire routine di allocazione di memoria personalizzate. Il costruttore per CAtlStringMgr accetta un singolo parametro: un puntatore a un IAtlMemMgr oggetto . IAtlMemMgr è una classe base astratta che fornisce un'interfaccia generica a un heap. Usando l'interfaccia IAtlMemMgr , CAtlStringMgr alloca, rialloca e libera la memoria usata per archiviare i dati stringa. È possibile implementare manualmente l'interfaccia IAtlMemMgr oppure usare una delle cinque classi di gestione della memoria fornite da ATL. I gestori di memoria forniti da ATL esegnano semplicemente le strutture di allocazione di memoria esistenti:

Ai fini della gestione della memoria delle stringhe, la classe più utile è CWin32Heap perché consente di creare più heap indipendenti. Ad esempio, se si vuole usare un heap separato solo per le stringhe, è possibile eseguire le operazioni seguenti:

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

Per usare questo gestore di stringhe private per gestire la memoria per una CString variabile, passare un puntatore al gestore come parametro al CString costruttore della variabile:

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

Vedi anche

Gestione della memoria con CStringT