相关疑难解决方法(0)

unique_ptr没有使用默认删除器获取init

当我创建一个unique_ptrwith时deleter,它可以工作:

std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr(new Animal<Cat>, [](Animal<Cat> *ls) {
    delete ls;
});
Run Code Online (Sandbox Code Playgroud)

但是,这段代码抛出错误:

std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
ptr = std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)>(new Animal<Cat>, [](Animal<Cat> *ls) {
    delete ls;
});
Run Code Online (Sandbox Code Playgroud)

错误:

/usr/bin/../lib/c++/v1/memory:2561:13: error: static_assert failed "unique_ptr constructed with null function pointer deleter"
                static_assert(!is_pointer<deleter_type>::value,
                ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: in instantiation of member function 'std::__1::unique_ptr<Animal<Cat>, void (*)(Animal<Cat> *)>::unique_ptr' requested here
            std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
                                                                ^
Run Code Online (Sandbox Code Playgroud)

这是我的编译器版本:

Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

动物和猫类是微不足道的.这是整个代码.

c++ smart-pointers c++11

6
推荐指数
2
解决办法
4575
查看次数

标签 统计

c++ ×1

c++11 ×1

smart-pointers ×1