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

最简单的方法自定义字符串数据的内存分配模式将使用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的内存管理