Zastanawiam się, czy istnieje sposób użycia unique_ptr<T>
z uchwytami systemu Windows?Jak używać standardowych inteligentnych wskaźników C++ z uchwytami systemu Windows?
Zastanawiam się nad zastąpieniem std::default_delete
specyficznym handle_trats
, który wywołuje CloseHandle
. Problem polega na tym, że HANDLE
jest zdefiniowany jako void*
unique_ptr<void>
nie zostanie skompilowany, ponieważ sizeof(void)
nie jest zdefiniowany.
tej pory widzę tylko dwie możliwości:
- utworzyć klasy otoki do klamek i używać go tak:
unique_ptr<new CHandle(h)>
. To sprawia, że samaunique_ptr<T>
jest bezużyteczna. - Użyj konkretnej klasy inteligentnego wskaźnika, która przypomina
unique_ptr<T>
.
Co według Ciebie jest lepszym wyborem? Co byś zasugerował?
Pytanie może zostać przedłużone o COM IUnknown
wskaźników - czy CComPtr
może zostać zastąpiony przez jeden ze standardowych inteligentnych wskaźników?
Napisałem własne ustawienia dla konkretnych klas, ponieważ niektóre uchwyty wymagają 'CloseHandle()', podczas gdy inne wymagają innych funkcji specyficznych dla API, niektóre HANDLE są ustawione na INVALID_HANDLE_VALUE, gdy nie są przypisane, a inne ustawione są na NULL zamiast itd. Napisałem zestaw klas bazowych dla większości prac, a następnie używam niestandardowych klas cech do obsługi problemów związanych z zamknięciem i przydziałem. –
-1 w celu ponownego wprowadzenia klas bibliotek źle. Są one wyraźnie zaprojektowane dla tej funkcjonalności, to nie jest nadużycie. Wprowadzisz bezcelowe nowe błędy i kod. – Puppy
+1 za rozpoznanie, że wskaźniki i UCHWYTY są różnymi rzeczami o różnej semantyki. Shoehorning HANDLEs to inteligentny typ wskaźnika, który oferuje wiele metod, które nie mają większego sensu w przypadku HANDLE. –