共享指針我試圖用與缺失者shared_ptr的:與缺失者
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
}
如何解決呢?
共享指針我試圖用與缺失者shared_ptr的:與缺失者
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
}
如何解決呢?
你deleter function
應採取A*
類型,例如看看下面缺失者實現:
struct A{ };
void Deleter(A* p){ delete p; };
int main(){
std::shared_ptr<A> sp(new A, Deleter);
return 0;
}
而且,你只有聲明函數指針foo
,你需要實現它。
您的自定義刪除程序未正確實施。試試這個:
void foo(A* p)
{
// do something, or not, it is up to you...
}
int main()
{
std::shared_ptr<A> sp(new A, foo);
}
你可以認爲
http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/
的std :: shared_ptr的P4(新INT,的std :: default_delete());
std :: shared_ptr p5(new int,[](int * p){delete p;},std :: allocator());
[Segmentation fault](http://coliru.stacked-crooked.com/a/7b39cc6340fbb808) – stella
@stella:你的實現仍然是錯誤的。再看看我實際上寫了什麼。 'void foo(A *){}'和'void(* foo)(A *){}'有很大區別。你正在聲明一個指向函數的*指針,但是沒有指定任何函數來指向它。這就是爲什麼你會遇到段錯誤。擺脫'(*)'部分,這是一個實際的功能。 –