I find shared_ptr
a bit more useful as a generic resource guard. It does not require the deleter to be the part of template arguments and as such can be easily passed around.
std::shared_ptr p(
::CommandLineToArgvW(L"cmd.exe p1 p2 p3", &n),
::LocalFree);