C_and_CPP 板


LINE

※ 引述《asleepme ( 机车蔡老头)》之铭言: : 关於个问题我也很有兴趣耶 : 不知道有哪位熟悉的人能帮忙解释呢? : 像这样的状况 : 在离开 fun()时b应该从heap中清掉了 : 所以可以这样用吗? : 还是得用 fun( struc bank &b ) ? : 这边衍生出一个问题就是 : 是不是涉及指标就不能用return的方式? 可以的。因为 return 的是 new 出来的位址,离开 函式时,被清掉的指标只是区域变数。 : 也就是说在subroutine里面假如malloc or new 了记忆体区段 : 然後想把这段传回去 : 那就得在进来fun时也同时传pointer过来 : 在程式离开之後再用这个pointer去free or delete 其实原本把物件透过参数列传进来,是比较正确的作法,但在 C 语言里面没有 reference,语法较为复杂,所以就直接 return new 或 malloc 出来的位址: T *foo(); // implement by malloc; call free whenever used : 而不能在fun里面救free or delete ? : 是这样吗? 其实没有很硬性的规定,也就是说,只要程式能正确执行,怎麽 做都可以,好与坏只是看你从什麽观点去评估。 return 一个动态配置的内存位置,在 C 是很常见的作法,例如 str_dup 之类的,缺点是用户要记得去 free 它,不然会有内存 泄漏的状况。 从现代编程的观点来看,这种作法不太符合物件导向的精神,因 为它让「配置」和「释放」这一组操作分散到两个模组去,而这 两个模组原本可能是无关的。 (也就是说,如果在两个相关程度很高的模组之间,例如同一个 class 或同一 pattern 之内两个函式,这种设计就合理。反之, 设计出像 str_dup 这样的 Library 就不是挺好) C++ 通常还有两种比较安全(?)的方法: std::auto_ptr<T> foo(); boost::shared_ptr<T> foo(); 虽然说是比较「安全」,但如果没有清楚了解它的用法,是很容 易不小心误用的(尤其是 auto_ptr)。 到了比较新的语言,例如 Java,因为它的语言核心就没有 free/ delete 的概念,其实根本连指标的语法都没有,所以语法上只要 直接回传物件就行了,语言底层会以 reference 的方式实现。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.214.120
1F:推 sunkill:我是原po 那以我贴的例子 应该要怎麽写会比较好? c++感谢 03/28 09:10
2F:推 drkkimo:研究看看 说的蛮细详的~ 04/01 10:16
3F:推 drkkimo::) 04/01 10:16
※ 编辑: cppOrz 来自: 59.120.214.120 (04/01 12:19)
4F:→ cppOrz:我把原来错误的部份更正了,sorry ~~ 04/01 12:19







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

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

TOP