私はwin32APIを持っていますCommandLineToArgvW
。これは、を返し、LPWSTR*
警告します。
CommandLineToArgvW
引数文字列へのポインタと引数文字列自体に連続したメモリのブロックを割り当てます。呼び出し元のアプリケーションは、引数リストが不要になったときに、引数リストで使用されていたメモリを解放する必要があります。メモリを解放するには、LocalFree
関数を1回呼び出します。
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;
}
上記のコードに問題はありますか?