我正在使用unique_ptr
等处理一些代码。该行是:
std::unique_ptr<char[], void(*)(void*)> result(..., std::free);
哪个有效。我意识到std :: free给出的类型是第二个模板参数。我尝试使用:
std::unique_ptr<char[], decltype(std::free)> result(..., std::free);
这将更容易阅读,并且不易出错。但是我收到与<memory>
和&#34相关的错误;用函数类型&#34;实例化数据成员。
有没有办法做到这一点?
答案 0 :(得分:12)
decltype(std::free)
产生std::free
的类型,它是函数类型void(void*)
,而不是函数指针类型void(*)(void*)
。您需要一个函数指针类型,您可以通过获取std::free
:
std::unique_ptr<char[], decltype(&std::free)> result(..., std::free);
^
或通过自己形成函数指针类型:
std::unique_ptr<char[], decltype(std::free)*> result(..., std::free);
^
(我认为前者更清楚。)