2011-01-26 3 views
0

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

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

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

+0

Хм, я на самом деле не называю это явно. Но вы поднимаете интересный момент, потому что я полагаюсь на умные указатели, а Image Cache будет разрушен на деструкторе класса CWinApp, который у меня есть. Пора попробовать что-то :) –

+0

Отлично! Спасибо, что указал мне в правильном направлении. Я назвал 'clear()' в своих кэшах в 'ExitInstance' вместо того, чтобы позволить им уничтожить и не нарушить прав доступа. –

Смежные вопросы