У меня есть win32 API CommandLineToArgvW
, который возвращает LPWSTR*
и
предупреждает меня, что
CommandLineToArgvW
выделяет блок непрерывной памяти для указатели на строки аргументов, а для строк аргументов самих себя; вызывающее приложение должно освободить память, используемую список аргументов, когда он больше не нужен. Чтобы освободить память, используйте одиночный вызов функцииLocalFree
.
См. http://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx
Что такое идиоматический способ C++ для освобождения памяти в приведенном выше случае ?
Я думал о std::unique_ptr
с пользовательским удалением, что-то вроде этого:
#include
#include
#include
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;
}
Есть ли проблема в приведенном выше коде?