看板 C_and_CPP 關於我們 聯絡資訊
最近遇到一個 情況 class Foo{ private: static void CallBack(){ //等callback回來做事} }; void main() { Foo *p = new Foo(); Save( Foo :: CallBack); //下面會開Thread做存檔 做好會callback回來 delete p; } Save還沒做完之前 delete會影響他嗎?? 我不太清楚這邊觀念 會不會造成callback回不來???或是更嚴重的可怕錯誤 其實這問題是我在寫C#.... 但是C#傳funcion 也不用特別寫成static 直接 Foo f=new Foo(); Save(f.CallBack); 就可以... C++這邊我猜因為是static 所以應該 life cycle應該是不會因為delete而怎樣 但是我也不是很肯定 有甚麼原因會讓callback回不來嗎?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.70.221
loveme00835:private 耶... 這編得過? 11/19 01:42
james732:static應該無妨...(?) 11/19 01:43
QQ29:喔~我是直接打在這 我改一下~只是大觀念想問一下 11/19 01:51
QQ29:同樣的問題在 C#版我也有問@@ 這兩邊case似乎不太一樣.... 11/19 01:51
※ 編輯: QQ29 來自: 123.192.70.221 (11/19 01:52)
stupid0319:單純delete應該資料都還在吧,沒被清空的話 11/19 01:52
QQ29:所謂資料是什麼呢? 有辦法手動清空嗎 11/19 01:53
stupid0319:Save( Foo :: CallBack);跟*p沒直接相關呀 11/19 01:56
loveme00835:你可以直接這樣寫沒有問題, 只是我比較推薦用 11/19 02:13
loveme00835:std::function / functor, 物件存在與否跟靜態成員函 11/19 02:14
loveme00835:式能不能執行沒有關係, 除非你有改到共用的地方 11/19 02:15
elfkiller:以這個例子來說 new一個p是多餘的 11/19 02:35
aecho:所以CallBack沒有把*p傳過去? 11/19 05:55
aecho:如果沒用到*p的資料,就沒關係吧~ 11/19 05:58
dk3208:改成call back to a non-static member function就會爆 11/19 17:33
loveme00835:那這樣呼叫的時候也要有 instance 才行 11/19 17:37
dk3208:對,我的意思就是如果傳入的instance在外面被delete就會爆XD 11/19 17:42