[問題] 想要有全域變數效果但是能控制lifetime
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
問題(Question):
1. 我有些參數,想要讓全部的function都能看的到
但是希望控制其life time
這個問題跟我上一篇很類似
我想要讓某個global object裡面的object執行某個function
但是因為變數眾多,而且我需要執行的次數只需要一次
所以我想說塞到destructor
但是發現因為是global variable,destructor會最後才跑,
我希望我能控制其被執行時間,也就是控制其lifetime
換句話說,我比較想要是local variable(可以控制何時死掉),
但是卻想讓所以function都看的到
目前想到是
(1) global設一個指標,在function內宣告變數,
並將此指標指向這個local variable
(2) 當成input參數,一層一層往下丟,但是因為包了好幾層,這修改起來頗麻煩
優點是可以定義那些function內部不可修改 (前面加const)
2. 想問,一般這種大家都要看的到的系統資料大家是怎麼處裡的?
我目前的作法感覺是做半套
包成class,宣告成global variable,
利用member function來保護內部資料不可以被隨意動到
但是變數一旦很多,每個都要弄成member function來讀取,十分麻煩
目前是因為一起開發的人數不多,大家很自律不會亂搞,所以很多都沒有另外包
大致上都是大家merge code時候順便檢查
但如果更多人開發,或是不夠自律的話,勢必還是需要一些保護措施
想問,實務上都是怎麼處理?
--
→
08/02 15:06,
08/02 15:06
推
08/02 15:08,
08/02 15:08
→
08/02 15:08,
08/02 15:08
→
08/02 15:08,
08/02 15:08
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1591103390.A.916.html
→
06/02 21:23,
4年前
, 1F
06/02 21:23, 1F
推
06/02 22:02,
4年前
, 2F
06/02 22:02, 2F
→
06/02 22:02,
4年前
, 3F
06/02 22:02, 3F
→
06/02 22:03,
4年前
, 4F
06/02 22:03, 4F
→
06/02 22:04,
4年前
, 5F
06/02 22:04, 5F
→
06/02 22:05,
4年前
, 6F
06/02 22:05, 6F
→
06/02 22:05,
4年前
, 7F
06/02 22:05, 7F
→
06/02 22:06,
4年前
, 8F
06/02 22:06, 8F
→
06/02 22:07,
4年前
, 9F
06/02 22:07, 9F
→
06/02 22:08,
4年前
, 10F
06/02 22:08, 10F
感謝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
→
06/02 23:50,
4年前
, 11F
06/02 23:50, 11F
→
06/02 23:51,
4年前
, 12F
06/02 23:51, 12F
→
06/02 23:51,
4年前
, 13F
06/02 23:51, 13F
感謝 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
→
06/03 00:23,
4年前
, 14F
06/03 00:23, 14F
→
06/03 00:24,
4年前
, 15F
06/03 00:24, 15F
→
06/03 00:24,
4年前
, 16F
06/03 00:24, 16F
→
06/03 00:41,
4年前
, 17F
06/03 00:41, 17F
→
06/03 00:42,
4年前
, 18F
06/03 00:42, 18F
→
06/03 00:42,
4年前
, 19F
06/03 00:42, 19F
→
06/03 00:47,
4年前
, 20F
06/03 00:47, 20F
推
06/03 11:14,
4年前
, 21F
06/03 11:14, 21F
→
06/03 11:16,
4年前
, 22F
06/03 11:16, 22F
→
06/03 11:17,
4年前
, 23F
06/03 11:17, 23F
→
06/03 11:17,
4年前
, 24F
06/03 11:17, 24F
推
06/03 17:35,
4年前
, 25F
06/03 17:35, 25F
→
06/03 17:38,
4年前
, 26F
06/03 17:38, 26F
→
06/03 23:12,
4年前
, 27F
06/03 23:12, 27F