【发布时间】:2012-04-11 04:39:42
【问题描述】:
我有 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 <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;
}
上面的代码有问题吗?
【问题讨论】:
标签: c++ winapi memory-management c++11 unique-ptr