std :: unique_ptr com deleter personalizado para win32 LocalFree

Tenho a API win32CommandLineToArgvW que retorna umLPWSTR* e me avisa que

CommandLineToArgvW aloca um bloco de memória contígua para ponteiros para as cadeias de argumentos e para as próprias cadeias de argumentos; o aplicativo de chamada deve liberar a memória usada pela lista de argumentos quando não for mais necessária. Para liberar a memória, use uma única chamada para oLocalFree função.

Vejohttp: //msdn.microsoft.com/en-us/library/windows/desktop/bb776391 (v = vs.85) .aspx

O que é uma maneira idiomática de C ++ para liberar a memória no caso acima?

Eu estava pensando em umstd::unique_ptr com um deleter personalizado, algo assim:

#include <Windows.h>
#include <memory>
#include <iostream>

template< class T >
struct Local_Del
{
   void operator()(T*p){::LocalFree(p);}
};

int main(int argc, char* argv[])
{
   {
      int n = 0;
      std::unique_ptr< LPWSTR, Local_Del< LPWSTR > > p( ::CommandLineToArgvW(L"cmd.exe p1 p2 p3",&n) );
      for ( int i = 0; i < n; i++ ) {
         std::wcout << p.get()[i] << L"\n";
      }
   }

    return 0;
}

Existe algum problema no código acima?

questionAnswers(6)

yourAnswerToTheQuestion