2017-07-03 12 views
0

我創建了下面的例子與波科計時器:如何將Poco :: SharedPtr傳遞給TimerCallback函數?

TimerExample example; 
Timer timer(250, 500); 
timer.start(TimerCallback<TimerExample>(example, &TimerExample::onTimer)); 

不過,我對我的情況TimerExample需要一個波科:: SharedPtr作爲

Poco::SharedPtr<TimerExample>TimerExample; 

TimerCallback的構造採用下列參數:

TimerCallback(
    C & object, 
    Callback method 
); 

其中C是模板類<TimerExample>對於我們的情況。
我想知道如何在波蘇:: SharedPtr傳遞給TimerCallback功能,以便與來自相關POCO指南030 MemoryManagement.pdf子彈一致的在那裏說:

一旦您使用SharedPtr作爲對象,而不再使用純指針 再次對該對象。

+0

這看起來很奇怪;由於'TimerCallback'構造函數引用了'TimerExample'實例,所以無論您做什麼,都無法將共享指針傳遞給它(您總是會得到一個引用,而您需要保留共享指針的副本)。我想你需要派生一個'TimerCallback'子代,它可以保留共享指針的副本,並在時機成熟時調用其祖先的方法來執行回調... – vencik

回答

0

正如vencik在評論中指出的 - 你不能。就目前而言,您只能傳入對具有回叫作爲成員的對象的引用,並且您必須確保它在TimerCallback實例的生命週期中有效 - 您的回調可以是您可以拒絕傳入的SharedPtr,但TimerCallback將採用其地址,並且不會在別處共享它。

+0

感謝您的迴應。關於SharedPtris的自動刪除,上面的處理可能會導致任何可能導致內存泄漏的異常情況? – dk13

+0

我能想到的唯一事情就是上面已經提到的:在最後一個SharedPtr實例持有指向它的指針被破壞後,不要訪問'TimerExample'。 – Alex