Share via


自定义字符串管理器的实现(基本方法)

自定义字符串数据的内存分配方案的最简单方法是使用 ATL 提供的 CAtlStringMgr 类,但提供自己的内存分配例程。 采用单个参数的 CAtlStringMgr 构造函数:指向 IAtlMemMgr 对象的指针。 IAtlMemMgr 是提供堆的泛型接口的抽象基类。 使用 IAtlMemMgr 接口,CAtlStringMgr 分配、重新分配和释放用于存储字符串数据的内存。 可以自行实现 IAtlMemMgr 接口,也可以使用五个 ATL 提供的内存管理器类之一。 ATL 提供的内存管理器只需包装现有的内存分配设施:

对于字符串内存管理,最有用的类是 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;
   }
}

另请参阅

使用 CStringT 进行内存管理