2015-07-21 57 views
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 
} 

如何解決呢?

回答

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,你需要實現它。

1

您的自定義刪除程序未正確實施。試試這個:

void foo(A* p) 
{ 
    // do something, or not, it is up to you... 
} 

int main() 
{ 
    std::shared_ptr<A> sp(new A, foo); 
} 

https://ideone.com/DHGpMy

+0

[Segmentation fault](http://coliru.stacked-crooked.com/a/7b39cc6340fbb808) – stella

+0

@stella:你的實現仍然是錯誤的。再看看我實際上寫了什麼。 'void foo(A *){}'和'void(* foo)(A *){}'有很大區別。你正在聲明一個指向函數的*指針,但是沒有指定任何函數來指向它。這就是爲什麼你會遇到段錯誤。擺脫'(*)'部分,這是一個實際的功能。 –