Раньше можно было делать так:
// shared_ptr< > way
LPWSTR lpName = NULL;
std::tr1::shared_ptr< WCHAR > spName( (
spItem->GetDisplayName( SIGDN_FILESYSPATH, &lpName ), lpName ),
CoTaskMemFree );
Теперь можно и вот так:
// unique_ptr< > way
typedef void ( __cdecl* _COM_DELETER )( LPVOID );
LPWSTR lpName = NULL;
std::unique_ptr< WCHAR, _COM_DELETER > spName( (
spItem->GetDisplayName( SIGDN_FILESYSPATH, &lpName ), lpName ),
CoTaskMemFree );
В случае с unique_ptr< > нет дополнительного оверхеда на счетчик и проверки-вызова делитера в рантайме, но теперь приходится указывать тип. А ещё можно делать такое:
std::unique_ptr< int[ ] > ar( new int[ 100 ] );
No comments:
Post a Comment