次の方法で共有


カスタム文字列マネージャーの実装 (基本メソッド)

文字列データのメモリ割り当てスキームをカスタマイズする最も簡単な方法は、ATL 指定の CAtlStringMgr クラスを使用しながら、独自のメモリ割り当てルーチンを指定することです。 CAtlStringMgr のコンストラクターは、IAtlMemMgr オブジェクトへのポインターという単一のパラメーター を受け取ります。 IAtlMemMgr では、抽象基底クラスであり、ヒープへのジェネリック インターフェイスを指定します。 IAtlMemMgr インターフェイスを使用すると、文字列データを保存するために使用されるメモリが、CAtlStringMgr によって割り当て、再割り当て、および解放されます。 IAtlMemMgr インターフェイスを自分で実装するか、5 つある 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 によるメモリ管理