带删除器的共享指针

时间:2015-07-21 04:21:14

标签: c++ pointers

我尝试将shared_ptr与deleter一起使用:

class A{ };

void (*foo)(){ };

int main(){
    std::shared_ptr<A> sp(new A, foo); //error: too many arguments to function call, 
                                       //expected 0, have 1
}

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您的deleter function应该以{{1​​}}作为类型,例如,请查看以下Deleter实施:

A*

另外,你只声明了函数指针struct A{ }; void Deleter(A* p){ delete p; }; int main(){ std::shared_ptr<A> sp(new A, Deleter); return 0; } ,你需要实现它。

答案 1 :(得分:1)

您的自定义删除工具未正确实施。试试这个:

foo

https://ideone.com/DHGpMy

答案 2 :(得分:0)

你可以考虑这一点 http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/

std :: shared_ptr p4(new int,std :: default_delete());

std :: shared_ptr p5(new int,[](int * p){delete p;},std :: allocator());