Поделиться через


Реализация пользовательского диспетчера строк (базовый метод)

Самый простой способ настроить схему выделения памяти для строковых данных — использовать предоставленный 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