C_and_CPP 板


LINE

写一个建构子 Foo(ICallback* callback) : mCallback(callback){ assert(mCallback); } 被问说那为什麽你mCallback不用reference 然後Foo就开成(ICallback&)就好 我不想这样改 但我没有强力的说法比较出哪一种比较好或是合理 我的看法 用ref, caller势必要*ptr 做dereference才能传进来 虽然说reference 可以当作non null去操作 但有心要传*null也不是不行. 开reference 给别人传,比起pointer更有机会caller不小心传入local variable 以上都可以用一句话“哪有人会这样写”来否定用pointer存. 而用reference 可以给人一种 必定要想办法生出一个物件才能呼叫的感觉... 实在想不到哪个时候 用reference 才是合理的写法. 反而我自己是很少看过member 用reference去存... 不知道大家在design上会有什麽考量 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.8.8.45
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1532344601.A.2C0.html ※ 编辑: lovejomi (39.8.8.45), 07/23/2018 19:36:57
1F:→ sarafciel: 我觉得你把物件变数的记忆体控管交出去就开始错了 07/23 19:47
2F:→ sarafciel: 要嘛写member function把生member variable的部分封装 07/23 19:51
3F:→ sarafciel: 起来给使用者call 要嘛丢进来的东西你自己再new一块做 07/23 19:52
4F:→ sarafciel: copy 07/23 19:53
5F:推 AstralBrain: 我觉得smart pointer唯一解 07/23 20:21
6F:推 BlazarArc: 没有说明Foo跟ICallBack的生命周期跟拥有权没办法回答 07/23 20:26
7F:→ BlazarArc: 你的看法那段的理由我觉得还蛮弱的 我会预设用ref 07/23 20:28
8F:→ BlazarArc: 不用ref的理由, class需要被copy 07/23 20:28
9F:→ lovejomi: 生命周期都比这class本身久, 我知道理由很弱,但我很 07/23 20:32
10F:→ lovejomi: 难描述我不想用ref的理由,总觉得不够弹性 07/23 20:32
11F:→ sarafciel: 阿对还有smart pointer这个解 我老了QQ 07/23 22:15
12F:→ nobodycares: std::function 选我正解好吗 07/23 22:40
13F:→ Killercat: 你要考虑callback生命周期 用reference传入的话 07/23 23:35
14F:→ Killercat: 其实有很高的机率会发生人为错误 07/23 23:35
15F:→ Killercat: pointer除非耍蠢 很不自然的传一个local variable的 07/23 23:36
16F:→ Killercat: pointer进来 不然基本上不太会出包 但ref机率高得多 07/23 23:36
17F:→ Killercat: 另外 smart pointer是通用解没错... 07/23 23:37
18F:推 eye5002003: 我的习惯是如果会改变外部状态就用指标,使用但是不会 07/24 00:44
19F:→ eye5002003: 去改变外部就用ref(常常搭配const来保证不会修改) 07/24 00:45
20F:推 eye5002003: 还需要担心生命周期的情况就都用std::shared_ptr处理 07/24 00:50
21F:推 ketrobo: ref比较好,B(A&),如果正确依照物件生命周期设计,乾净的 07/24 02:23
22F:→ ketrobo: 程式结构会是B先结束,之後才是A结束,用pointer会变成语 07/24 02:23
23F:→ ketrobo: 法上少了限制,随便写都会产生cyclic dependency的问题, 07/24 02:23
24F:→ ketrobo: 造成物件生命周期结束这块非常难写,然後系统资源没释放 07/24 02:23
25F:→ ketrobo: 完,浪费工程师的生命在找问题,最後跟你说解决的办法是定 07/24 02:23
26F:→ ketrobo: 期reset整台机器…简单讲B(A&)很自然就从语法上让你设计 07/24 02:23
27F:→ ketrobo: 出遵循着RAII的程式结构 07/24 02:23
28F:→ tinlans: 从语法层级探讨很没意义,高兴怎样就怎样啊,真非要用 07/24 05:47
29F:→ tinlans: reference 还有 reference_wrapper 可以活用。 07/24 05:47
30F:→ tinlans: 正确来讲还是要从生命周期去探讨,用更高阶抽象的概念来 07/24 05:48
31F:→ tinlans: 说就是 aggregation 跟 composition 的差异。 07/24 05:48
32F:→ tinlans: 如果对这两个名词陌生,可能要去补足一下 OOAD 的知识。 07/24 05:49
33F:→ tinlans: 身为一名工程师,设计图之类的当然要会画,然後按图施工 07/24 05:50
34F:→ tinlans: ,今天会有这种问题跑出来就是因为你没图。 07/24 05:50
35F:推 andyjy12: reference 不能直接更换绑定对象 07/28 12:57







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灯, 水草

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

TOP