Gdiplus :: Image Объект и повышение :: shared_ptr - PullRequest
0 голосов
/ 26 января 2011

В моем приложении MFC есть простой класс кэширования изображений для отслеживания изображений, загруженных из файловой системы:

typedef boost::shared_ptr<Gdiplus::Image> ImagePtr;
typedef std::map<std::string, ImagePtr> ImageMap;

Всякий раз, когда изображение запрашивается по имени файла, выполняется поиск или, если оно уже загружено, возвращается соответствующий ImagePtr.

Проблема возникает, когда я выхожу из приложения, и общий указатель разрушается. Я получаю нарушение прав доступа здесь, в checked_delete.hpp :

// verify that types are complete for increased safety

template<class T> inline void checked_delete(T * x)
{
    // intentionally complex - simplification causes regressions
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete x; // <-------- violation here!!
}

Управляет ли GDI + этими объектами для меня? Если так, что мне нужно сделать с моим shared_ptr, чтобы он не вызывал delete? Или что-то еще не так?

Заранее спасибо!

1 Ответ

1 голос
/ 26 января 2011

Это может быть признаком вызова GdiplusShutdown до уничтожения указателей.

...