Implementation of a Custom String Manager (Basic Method)
最簡單的方式自訂字串資料的記憶體配置計劃會使用 ATL 提供 CAtlStringMgr 類別,但您的記憶體配置常式。 CAtlStringMgr 的建構函式會接受單一參數:為 IAtlMemMgr 物件的指標。 IAtlMemMgr 是提供泛型介面給堆積的抽象基底類別。 使用 IAtlMemMgr 介面, CAtlStringMgr 配置,重新配置,並釋放所使用的記憶體中儲存字串資料。 您可以實作 IAtlMemMgr 介面,或是使用其中一個 ATL 提供了記憶體管理員類別。 ATL 提供了記憶體管理員包裝現有的記憶體配置安裝:
CWin32Heap使用 HeapAlloc、 HeapFree和 HeapRealloc,包裝 Win32 控制代碼,堆積
CLocalHeap包裝 Win32 API: LocalAlloc、 LocalFree和 LocalRealloc
CGlobalHeap包裝 Win32 API: GlobalAlloc、 GlobalFree和 GlobalRealloc。
CComHeap包裝 COM 工作配置器 API: CoTaskMemAlloc、 CoTaskMemFree和 CoTaskMemRealloc
字串形式的記憶體管理的目的,,因為它可讓您建立多個獨立堆積,最實用的類別是 CWin32Heap 。 例如,在中,如果您想要對字串使用不同堆積,可以執行下列操作:
// 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);
若要使用這個私用字串處理常式處理 CString 變數的記憶體,請將指標傳遞給這個處理常式做為參數傳遞至 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;
}
}