Как вы говорите, CImageList
- это простая оболочка вокруг HIMAGELIST
. CImageList::Replace
просто звонит ImageList_Replace
, документация которого гласит:
Функция ImageList_Replace
копирует растровое изображение во внутреннюю структуру данных. Обязательно используйте функцию DeleteObject
для удаления hbmImage
и hbmMask
после возврата из функции.
Это означает, что вы можете создать объект CBitmap
в стеке, вызвать CImageList::Replace
, и список изображений получит копию растрового изображения из объекта CBitmap
. Затем, когда объект CBitmap
выходит из области видимости, его деструктор (точнее, деструктор базового класса * 1021) вызовет DeleteObject
, чтобы удалить растровое изображение. Поскольку список изображений копирует все добавленные в него растровые изображения, он должен удалить замененное растровое изображение.
Когда выполняется деструктор CImageList
, это вызывает ImageList_Destroy
для удаления базового HIMAGELIST
, который должен удалить все растровые изображения, принадлежащие списку изображений.