自訂字串管理員實作 (基本方法)
自定義字串數據的記憶體配置配置最簡單的方式是使用 ATL 提供的 CAtlStringMgr
類別,但提供您自己的記憶體配置例程。 的建構函式 CAtlStringMgr
會採用單一參數:物件的指標 IAtlMemMgr
。 IAtlMemMgr
是抽象基類,可提供堆積的泛型介面。 IAtlMemMgr
使用 介面時,會CAtlStringMgr
配置、重新配置及釋放用來儲存字串數據的記憶體。 您可以自行實作 IAtlMemMgr
介面,或使用五個 ATL 提供的記憶體管理員類別之一。 ATL 提供的記憶體管理員只會包裝現有的記憶體配置設施:
CCRTHeap 包裝標準 CRT 堆積 函式 (malloc、 free 和 realloc)
CWin32Heap 包裝 Win32 堆積 句柄,使用 HeapAlloc、 HeapFree 和 HeapRealloc
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;
}
}