使用自定义删除器返回unique_ptr的nullptr失败

时间:2016-06-07 12:10:17

标签: c++ templates compiler-errors c++14

当我尝试编译此代码时,它无法说: “错误:静态断言失败:使用空函数指针删除器构造”。它抱怨的那条线是“return nullptr”。返回nullptr与我编写的其他返回unique_ptr的函数一起使用。为什么这么不同甚至无法编译?

public void UpdateUser([FromBody]User user) {}

1 个答案:

答案 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的引用类型,程序格式不正确。