次の方法で共有


カスタム文字列マネージャの実装 (基本的な方法)

更新 : 2007 年 11 月

文字列データのメモリ割り当て方法を最も簡単にカスタマイズする方法は、ATL に用意されている CAtlStringMgr クラスを使用し、独自のメモリ割り当てルーチンを用意することです。CAtlStringMgr のコンストラクタは、IAtlMemMgr オブジェクトへのポインタを唯一のパラメータとして受け取ります。IAtlMemMgr は、ヒープにジェネリック インターフェイスを提供する抽象基本クラスです。IAtlMemMgr インターフェイスを使用して、CAtlStringMgr は、文字列データの格納に使用するメモリを割り当て、再割り当て、および解放します。IAtlMemMgr インターフェイスを独自に実装することも、ATL に用意されている 5 つのメモリ マネージャ クラスのいずれかを使用することもできます。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 によるメモリ管理