C++ 使用非静态成员函数为std::unique_ptr设置自定义删除程序
如何将成员函数设置为C++ 使用非静态成员函数为std::unique_ptr设置自定义删除程序,c++,C++,如何将成员函数设置为std::unique\u ptr的自定义删除程序 class foo{ public: foo() = default; }; class fooDeleter{ public: fooDeleter() = default; void deleteFoo(foo* f) { cout << "deleting foo" << endl; delete f;
std::unique\u ptr
的自定义删除程序
class foo{
public:
foo() = default;
};
class fooDeleter{
public:
fooDeleter() = default;
void deleteFoo(foo* f) {
cout << "deleting foo" << endl;
delete f;
}
};
int main() {
fooDeleter* fd = new fooDeleter;
using fptr = void (fooDeleter::*)(foo *f);
fptr p = &fooDeleter::deleteFoo;
std::unique_ptr<foo, fptr> fooptr{nullptr, (fd->*p)}; // syntax error
}
- 编辑:
自定义删除器在JNI库中声明为非静态方法,因此我无法更改它。 因此,最终的删除器必须是非静态方法
- 简短回答-您不能将非静态方法直接用作删除器。这根本不是
unique\u ptr
所期望的。您必须使用以下任一选项:
- 独立函数或静态方法
- 羔羊
- 函子(实现了
的对象)运算符()
class-foo{
公众:
foo()=默认值;
};
void deleteFoo(foo*f){
无法将函数设置为静态。是的,您的示例中没有任何内容使用fooDeleter
中的this
值,因此它应该作为静态类函数工作。伙计们,这只是一个示例。自定义删除器在JNI库中声明为非静态成员函数,因此我无法更改它。我将尝试第三个。感谢您的解释
foo* f = new foo;
(fd->*p)(f);