Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die einfachste Möglichkeit zum Anpassen des Speicherzuordnungsschemas für Zeichenfolgendaten besteht darin, die von ATL bereitgestellte CAtlStringMgr Klasse zu verwenden, aber Ihre eigenen Speicherzuweisungsroutinen bereitzustellen. Der Konstruktor für CAtlStringMgr einen einzelnen Parameter: einen Zeiger auf ein IAtlMemMgr Objekt. IAtlMemMgr ist eine abstrakte Basisklasse, die eine generische Schnittstelle zu einem Heap bereitstellt. Mithilfe der IAtlMemMgr Schnittstelle werden die CAtlStringMgr Zuweisungen, Zuordnungen und Zuordnungen freigegeben und der Speicher freigegeben, der zum Speichern von Zeichenfolgendaten verwendet wird. Sie können die IAtlMemMgr Schnittstelle entweder selbst implementieren oder eine der fünf von ATL bereitgestellten Speicher-Manager-Klassen verwenden. Die von ATL bereitgestellten Speichermanager schließen einfach vorhandene Speicherzuweisungseinrichtungen ein:
CCRTHeap wraps the standard CRT heap functions (malloc, free, and realloc)
CWin32Heap wraps a Win32 heap handle, using HeapAlloc, HeapFree, and HeapRealloc
CLocalHeap umschließt die Win32-APIs: LocalAlloc, LocalFree und LocalRealloc
CGlobalHeap umschließt die Win32-APIs: GlobalAlloc, GlobalFree und GlobalRealloc.
CComHeap umschließt die COM Task Allocator-APIs: CoTaskMemAlloc, CoTaskMemFree und CoTaskMemRealloc
Zum Zweck der Zeichenfolgenspeicherverwaltung ist CWin32Heap die nützlichste Klasse, da Sie mehrere unabhängige Heaps erstellen können. Wenn Sie beispielsweise nur für Zeichenfolgen einen separaten Heap verwenden möchten, können Sie die folgenden Aktionen ausführen:
// 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);
Um diesen privaten Zeichenfolgen-Manager zum Verwalten des Arbeitsspeichers für eine CString Variable zu verwenden, übergeben Sie einen Zeiger als Parameter an den Manager an den Konstruktor der CString Variablen:
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;
}
}