Wektor inteligentnych wskaźników struktur – błąd podczas tworzenia wskaźnika

0

Tworzę dokument PDF z wykorzystaniem biblioteki libharu napisanej w C.


/*definicja wektora*/
std::vector<std::shared_ptr<HPDF_Page> > pages;

/*stworzenie dokumentu*/
HPDF_Doc documentPdf = HPDF_New(error_handler, 0); 

/*dodanie strony do dokumentu*/
/*HPDF_Page HPDF_AddPage (HPDF_Doc pdf);*/
/*typedef HPDF_Dict  HPDF_Page;*/
/*typedef struct _HPDF_Dict_Rec  *HPDF_Dict;*/

pages.push_back(std::shared_ptr<HPDF_Page>(HPDF_AddPage(documentPdf)))

Przy próbie stworzenia shared_ptr i dodania go do vektora wywala mi bład:

Error	1	error C2664: 'void std::_Ptr_base<_Ty>::_Reset0(_Ty *,std::_Ref_count_base *)' : cannot convert argument 1 from '_HPDF_Dict_Rec *' to 'HPDF_Page *
4

Nie znam dokładnie tej biblioteki, ale tak pobieżnie patrząc nie widzę tutaj potrzeby używania shared_ptr, a nawet jest to niewskazane [1]. Zwracane wskaźniki do stron są odpowiednikami "observer pointer" i nie następuje tutaj transfer odpowiedzialności za zasób. Zasób, który przydałoby się chronić inteligentnym wskaźnikiem jest w twoim przypadku HPDF_Doc documentPdf, ale tutaj unique_ptr będzie całkowicie wystarczający.

[1] HPDF_AddPage zwraca wskaźnik do edycji strony w dokumencie, ale to dokument jest właścicielem zasobu (tak mi się wydaje pobieżnie patrząc) i strona będzie zwolniona gdy wołasz HPDF_Free (pdf); . Shared pointer nie ma o tym pojęcia i jego wewnętrzny licznik będzie ustawiony na jeden w momencie inicjalizacji, czyli nawet jeśli uda Ci się to przypisanie to i tak dostaniesz błąd naruszenia pamięci przy zamknięciu procesu jeśli zgodnie z dokumentacją zawołasz HPDF_free.

1 użytkowników online, w tym zalogowanych: 0, gości: 1