

Программирование на языке MFC
Мой второй блог в серии программирования
Переменная m_pStoreMap
В том случае, если производится сохранение объекта и переменная m__pStoreMap (пока мы о ней ничего не знаем) равна NULL, то… То заводится новый объект класса CMapPtrToPtr и указатель на него присваивается переменной m__pStoreMap! Значит, поле m_pStoreMap содержит в себе указатель на объект, предназначенный для работы с хэш-таблицей! Следовательно, в процессе сохранения объекта в архиве используется хэш-таблица! При этом для входа в таблицу в качестве ключа используются указатели, а в качестве значений также используются указатели. После создания хэш-таблица инициализируется и (еще раз внимание, читатель) в нулевой элецент хэш-таблицы записывается указатель на новую ассоциацию, причем ключом этой ассоциации является значение NULL, а значением – нуль. Счетчик количества ассоциаций, т. е. поле mjiMapCount увеличивается на единицу, т. е. делается равным одному. Если аргумент метода равен NULL, то больше никаких действий не производится. И какой вывод мы можем сделать из сказанного выше? Вывод состоит в том, что метод MapObject() с переданным ему в качестве аргумента значением NULL вызывать совершенно безопасно! В том случае, если обращение к методу осуществляется впервые, то будет создана и проинициализиро-вана хэш-таблица, только и всего.
Но вернемся к методу WriteObject(). После инициализации хэш-таблицы в том случае, если мы хотим записать в архив нулевой указатель, то в архив записывается значение wNullTag, которое в файле appobj.cpp определено следующим образом:
#define wNullTag ((WORD)0)
// special tag indicating NULL ptrs
