自訂字串管理員實作 (基本方法)
自訂字串資料的記憶體配置配置最簡單的方式是使用 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;
}
}
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應