当我尝试编译此代码时,它无法说: “错误:静态断言失败:使用空函数指针删除器构造”。它抱怨的那条线是“return nullptr”。返回nullptr与我编写的其他返回unique_ptr的函数一起使用。为什么这么不同甚至无法编译?
public void UpdateUser([FromBody]User user) {}
答案 0 :(得分:1)
您似乎需要使用函数对象,例如:
template<typename ArrayType>
struct deleter {
void operator()(ArrayType* array) {
if (array)
{
delete[] array;
array = nullptr;
std::cout << "Freed array." << std::endl;
}
}
};
见这里的例子:
http://coliru.stacked-crooked.com/a/172693cdc5704531
我认为标准的相关部分在20.8.1.2.1 [unique.ptr.single.ctor]
返回nullptr你打电话:unique_ptr& operator=(nullptr_t) noexcept;
调用constexpr unique_ptr() noexcept;
,后者又在备注中注明:
备注:如果使用指针类型或实例化此构造函数 模板参数D的引用类型,程序格式不正确。