→ peter200567:暫且不論教育部的挹注資金,長庚大學的校務基金就高達08/02 15:06
推 Turtle100:2元08/02 15:08
→ peter200567:300多億,也因此學校很敢給錢,聽到許多碩班學生每個08/02 15:08
→ Jeanime:就射了08/02 15:08
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1591103390.A.916.html
→ firejox: 你全域的東西會半途死掉? 06/02 21:23
推 ddavid: 我不太懂原Po你的邏輯,如果這變數一次就死了,那你函數第 06/02 22:02
→ ddavid: 二次執行到時去參考該變數該怎麼辦? 06/02 22:02
→ ddavid: 如果連函數都肯定只會執行一次,那就你自己提到包個class 06/02 22:03
→ ddavid: 處理,用完class實體砍掉。 06/02 22:04
→ ddavid: 如果你只是怕該變數值用完後被繼續偷用,那就確定用完時塞 06/02 22:05
→ ddavid: null之類的給它啊,然後函數裡面去參考該變數時看到null就 06/02 22:05
→ ddavid: 表示用過了,不該進行需要參考它的處理 06/02 22:06
→ ddavid: 如果這種變數有很多個,通通塞一起弄個結構,全域開個指標 06/02 22:07
→ ddavid: 來指它的使用中實體,用完釋放掉指標給NULL,同上述處理 06/02 22:08
感謝F大 D大耐心看完,抱歉我表達能力很差Orz
概念上我想要
int main() {
for (int test_mode = 0; test_mode < 3; test_mode++)
test_func(test_mode);
return 0;
}
我想要在test_func內,每次進去都是乾淨得進去,全部重新初始化
離開的時候死光光
但是裡面很多系統參數,或是紀錄結果用的class,會根據test_mode初始化
這些系統參數希望在test_func內部所有的function或class都要能夠看的到,
能夠讀取
但我又希望,每一次進去test_func所有人都要重新來,避免不同test_mode結果混再一起
一種比較接近我想要的結果作法為
希望被所有人看到的變數弄成global variable
進去時候根據test_mode來做初始化
程式離開前,自己call function將結果存下來同時把所有空間都release
我原本想說如果可以自己控制變數的lifetime,同時也能滿足大家都能看的到
這樣最後call function的部分,甚至許多同一個class但是很多的object
原本要手動放在離開時的function內部存檔,我只要放在destructor
這樣新增變數時候,我只要改初始化的部分,存檔的部分在destructor不用改
在自動存檔的地方不需要自己而外加此新增的變數
我的疑惑在於,想要使用destructor就必須要離開test_func()時候死掉
所以應該要在test_func()內部定義成local variable
然而如果是local variable的話,test_func()內的其他function就必須透過
function input parameter傳遞
想要一些簡單 方便,code容易維持與修改的方式
※ 編輯: ofd168 (59.102.231.161 臺灣), 06/02/2020 23:31:38
→ loveme00835: 看起來像是 template method 不過在存取端一定會有相 06/02 23:50
→ loveme00835: 依性問題, 變成在 type erasure 或是 dynamic polym- 06/02 23:51
→ loveme00835: orphism 之間做取捨 06/02 23:51
感謝 L大 Orz
上一篇得到L大解答後
目前朝向放棄使用destructor的方法
讓所有人吃的參數與object都宣告成global variable
乖乖的進入test_func()時候初始化
要離開時,在最後一行執刪除所有空間的function
搭配L大解法,利用define與apply()為每個object執行存檔
※ 編輯: ofd168 (59.102.231.161 臺灣), 06/03/2020 00:03:27
→ loveme00835: 你需要的是明確定義流程, 而其他重覆的程式碼都可以 06/03 00:23
→ loveme00835: 透過 CRTP 預先在 base class 定義好 06/03 00:24
→ loveme00835: 雖然 RAII 可以做到類似的功能, 但因為編譯器允許把 06/03 00:41
→ loveme00835: dtor call 給 optimize 掉, 所以把 side-effect 放在 06/03 00:42
→ loveme00835: dtor 裡完成是比較不保險的做法 06/03 00:42
→ loveme00835: 上面程式碼少加 virtual dtor 在 base 裡 06/03 00:47
推 ddavid: 所以其實原Po你要做就類似單元測試多個test cases是吧? 06/03 11:14
→ ddavid: 是不是直接去找一些單元測試的framework看看其特性是否符 06/03 11:16
→ ddavid: 合你的需求,單元測試framework基本上應該都有test case互 06/03 11:17
→ ddavid: 不干擾的處理,也許就是你要的? 06/03 11:17
推 flarehunter: 聽起來很像GoogleTest的testing::Environment class 06/03 17:35
→ flarehunter: 或是parameterized test 06/03 17:38
→ ofd168: 感謝樓上幾位大大,我研究研究 06/03 23:12