[問題] CallBack function 請教

看板C_and_CPP作者 (我愛阿蓉)時間15年前 (2010/11/19 01:41), 編輯推噓3(3013)
留言16則, 7人參與, 最新討論串1/1
最近遇到一個 情況 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

11/19 01:42, , 1F
private 耶... 這編得過?
11/19 01:42, 1F

11/19 01:43, , 2F
static應該無妨...(?)
11/19 01:43, 2F

11/19 01:51, , 3F
喔~我是直接打在這 我改一下~只是大觀念想問一下
11/19 01:51, 3F

11/19 01:51, , 4F
同樣的問題在 C#版我也有問@@ 這兩邊case似乎不太一樣....
11/19 01:51, 4F
※ 編輯: QQ29 來自: 123.192.70.221 (11/19 01:52)

11/19 01:52, , 5F
單純delete應該資料都還在吧,沒被清空的話
11/19 01:52, 5F

11/19 01:53, , 6F
所謂資料是什麼呢? 有辦法手動清空嗎
11/19 01:53, 6F

11/19 01:56, , 7F
Save( Foo :: CallBack);跟*p沒直接相關呀
11/19 01:56, 7F

11/19 02:13, , 8F
你可以直接這樣寫沒有問題, 只是我比較推薦用
11/19 02:13, 8F

11/19 02:14, , 9F
std::function / functor, 物件存在與否跟靜態成員函
11/19 02:14, 9F

11/19 02:15, , 10F
式能不能執行沒有關係, 除非你有改到共用的地方
11/19 02:15, 10F

11/19 02:35, , 11F
以這個例子來說 new一個p是多餘的
11/19 02:35, 11F

11/19 05:55, , 12F
所以CallBack沒有把*p傳過去?
11/19 05:55, 12F

11/19 05:58, , 13F
如果沒用到*p的資料,就沒關係吧~
11/19 05:58, 13F

11/19 17:33, , 14F
改成call back to a non-static member function就會爆
11/19 17:33, 14F

11/19 17:37, , 15F
那這樣呼叫的時候也要有 instance 才行
11/19 17:37, 15F

11/19 17:42, , 16F
對,我的意思就是如果傳入的instance在外面被delete就會爆XD
11/19 17:42, 16F
文章代碼(AID): #1CvMKieh (C_and_CPP)