C_and_CPP 板


LINE

开发平台(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时候顺便检查 但如果更多人开发,或是不够自律的话,势必还是需要一些保护措施 想问,实务上都是怎麽处理? --
1F:→ peter200567:暂且不论教育部的挹注资金,长庚大学的校务基金就高达08/02 15:06
2F:推 Turtle100:2元08/02 15:08
3F:→ peter200567:300多亿,也因此学校很敢给钱,听到许多硕班学生每个08/02 15:08
4F:→ Jeanime:就射了08/02 15:08
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.204.170 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1591103390.A.916.html
5F:→ firejox: 你全域的东西会半途死掉? 06/02 21:23
6F:推 ddavid: 我不太懂原Po你的逻辑,如果这变数一次就死了,那你函数第 06/02 22:02
7F:→ ddavid: 二次执行到时去参考该变数该怎麽办? 06/02 22:02
8F:→ ddavid: 如果连函数都肯定只会执行一次,那就你自己提到包个class 06/02 22:03
9F:→ ddavid: 处理,用完class实体砍掉。 06/02 22:04
10F:→ ddavid: 如果你只是怕该变数值用完後被继续偷用,那就确定用完时塞 06/02 22:05
11F:→ ddavid: null之类的给它啊,然後函数里面去参考该变数时看到null就 06/02 22:05
12F:→ ddavid: 表示用过了,不该进行需要参考它的处理 06/02 22:06
13F:→ ddavid: 如果这种变数有很多个,通通塞一起弄个结构,全域开个指标 06/02 22:07
14F:→ 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
15F:→ loveme00835: 看起来像是 template method 不过在存取端一定会有相 06/02 23:50
16F:→ loveme00835: 依性问题, 变成在 type erasure 或是 dynamic polym- 06/02 23:51
17F:→ 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
18F:→ loveme00835: 你需要的是明确定义流程, 而其他重覆的程式码都可以 06/03 00:23
19F:→ loveme00835: 透过 CRTP 预先在 base class 定义好 06/03 00:24
20F:→ loveme00835: https://wandbox.org/permlink/6lqqEHTxC7AHkT6V 06/03 00:24
21F:→ loveme00835: 虽然 RAII 可以做到类似的功能, 但因为编译器允许把 06/03 00:41
22F:→ loveme00835: dtor call 给 optimize 掉, 所以把 side-effect 放在 06/03 00:42
23F:→ loveme00835: dtor 里完成是比较不保险的做法 06/03 00:42
24F:→ loveme00835: 上面程式码少加 virtual dtor 在 base 里 06/03 00:47
25F:推 ddavid: 所以其实原Po你要做就类似单元测试多个test cases是吧? 06/03 11:14
26F:→ ddavid: 是不是直接去找一些单元测试的framework看看其特性是否符 06/03 11:16
27F:→ ddavid: 合你的需求,单元测试framework基本上应该都有test case互 06/03 11:17
28F:→ ddavid: 不干扰的处理,也许就是你要的? 06/03 11:17
29F:推 flarehunter: 听起来很像GoogleTest的testing::Environment class 06/03 17:35
30F:→ flarehunter: 或是parameterized test 06/03 17:38
31F:→ ofd168: 感谢楼上几位大大,我研究研究 06/03 23:12







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP