[问题] 想要有全域变量效果但是能控制lifetime

楼主: ofd168 (大色狼来袭)   2020-06-02 21:09:42
开发平台(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时候顺便检查
但如果更多人开发,或是不够自律的话,势必还是需要一些保护措施
想问,实务上都是怎么处理?
作者: firejox (Tangent)   2020-06-02 21:23:00
你全域的东西会半途死掉?
作者: ddavid (谎言接线生)   2020-06-02 22:02:00
我不太懂原Po你的逻辑,如果这变量一次就死了,那你函数第二次执行到时去参考该变量该怎么办?如果连函数都肯定只会执行一次,那就你自己提到包个class处理,用完class实体砍掉。如果你只是怕该变量值用完后被继续偷用,那就确定用完时塞null之类的给它啊,然后函数里面去参考该变量时看到null就表示用过了,不该进行需要参考它的处理如果这种变量有很多个,通通塞一起弄个结构,全域开个指标来指它的使用中实体,用完释放掉指标给NULL,同上述处理
作者: loveme00835 (发箍)   2020-06-02 23:50:00
看起来像是 template method 不过在存取端一定会有相依性问题, 变成在 type erasure 或是 dynamic polym-orphism 之间做取舍你需要的是明确定义流程, 而其他重复的程式码都可以透过 CRTP 预先在 base class 定义好https://wandbox.org/permlink/6lqqEHTxC7AHkT6V虽然 RAII 可以做到类似的功能, 但因为编译器允许把dtor call 给 optimize 掉, 所以把 side-effect 放在dtor 里完成是比较不保险的做法上面程式码少加 virtual dtor 在 base 里
作者: ddavid (谎言接线生)   2020-06-03 11:14:00
所以其实原Po你要做就类似单元测试多个test cases是吧?是不是直接去找一些单元测试的framework看看其特性是否符合你的需求,单元测试framework基本上应该都有test case互不干扰的处理,也许就是你要的?
作者: peter200567 (PETER )   2020-08-02 15:06:00
暂且不论教育部的挹注资金,长庚大学的校务基金就高达
作者: Turtle100 (龟龟100)   2020-08-02 15:08:00
2元
作者: peter200567 (PETER )   2020-08-02 15:08:00
300多亿,也因此学校很敢给钱,听到许多硕班学生每个
作者: Jeanime (偷偷)   2020-08-02 15:08:00
就射了
作者: flarehunter (Range)   2020-06-03 17:35:00
听起来很像GoogleTest的testing::Environment class或是parameterized test
楼主: ofd168 (大色狼来袭)   2020-06-03 23:12:00
感谢楼上几位大大,我研究研究

Links booklink

Contact Us: admin [ a t ] ucptt.com