Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) e a Active Template Library (ATL) continuam a ser suportadas. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
A forma mais fácil de personalizar o esquema de alocação de memória para os dados das strings é usar a classe fornecida CAtlStringMgr pelo ATL, mas fornecer as suas próprias rotinas de alocação de memória. O construtor para CAtlStringMgr toma um único parâmetro: um ponteiro para um IAtlMemMgr objeto.
IAtlMemMgr é uma classe base abstrata que fornece uma interface genérica para um heap. Usando a IAtlMemMgr interface, aloca CAtlStringMgr , realoca e liberta a memória usada para armazenar os dados das strings. Podes implementar a IAtlMemMgr interface tu próprio, ou usar uma das cinco classes de gestor de memória fornecidas pelo ATL. Os gestores de memória fornecidos por ATL simplesmente envolvem as instalações existentes de alocação de memória:
CCRTHeap Envolve as funções padrão do heap CRT (malloc, free e realloc)
CWin32Heap Envolve um handler de heap Win32, usando HeapAlloc, HeapFree e HeapRealloc
CLocalHeap Envolve as APIs Win32: LocalAlloc, LocalFree e LocalRealloc
CGlobalHeap Envolve as APIs Win32: GlobalAlloc, GlobalFree e GlobalRealloc.
CComHeap Envolve as APIs do Alocador de Tarefas COM: CoTaskMemAlloc, CoTaskMemFree e CoTaskMemRealloc
Para fins de gestão de memória de strings, a classe mais útil é CWin32Heap porque permite criar múltiplos heaps independentes. Por exemplo, se quiser usar um heap separado só para as cordas, pode 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 este gestor privado de strings para gerir a memória de uma CString variável, passe um ponteiro ao gestor como parâmetro para o CString construtor da variável:
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;
}
}