std :: unique_ptr с пользовательским удалителем для win32 LocalFree

У меня есть win32 APICommandLineToArgvW который возвращаетLPWSTR* и предупреждает меня, что

CommandLineToArgvW выделяет блок непрерывной памяти для указателей на строки аргументов и для самих строк аргументов; вызывающее приложение должно освободить память, используемую списком аргументов, когда она больше не нужна. Чтобы освободить память, используйте один вызовLocalFree функция.

Видетьhttp://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx

Что такое идиоматический способ освобождения памяти в C ++ в указанном выше случае?

Я думал оstd::unique_ptr с пользовательским удалителем, что-то вроде этого:

#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;
}

Есть ли проблема в приведенном выше коде?

Ответы на вопрос(3)

Ваш ответ на вопрос