Программирование на языке 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