C_and_CPP 板


LINE

最近在写作业时遇到了一些问题 作业内容是关於用link-list作为替代array的应用 在做完後需要在解构式中自己回收记忆体 然而有些函式呼叫後会产生问题 在测试了很多次後发现问题大概是出在当想要回传一个物件时 在回传後会自动呼叫解构式 所以目前的解决方式是用一个flag让记忆体不要释放 但是这不是长久之计所以想了解有没有其他方法可以避免这样情形 由於本来的code还蛮长的 所以我用一个简单例子也是同样问题希望大家帮我挑毛病 class ball{ public: ball(); ~ball(); ball fun(); }; ball::~ball(){ cout<<"*"<<endl; } ball ball:: fun(){ return (*this); } int main(){ ball b1; b1.fun(); return 0; } 我大概知道问题是出在呼叫fun的时候 因为fun的形式是ball 所以结束完会呼叫解构 然後呼叫解构的是b1 在这个例子中会印出* 但是如果释放记忆体的话,可能整个b1的内容都不见了 所以想要请问大家 关於解构式的呼叫观念我有没有错 以及如果遇到这样大家会怎麽解决 -------------------------------------------- http://codepad.org/xcuGPkJR 上面那个ball 的code 我用visual studio逐步执行 发现只要呼叫完fun就会呼叫解构式 可是却不会呼叫建构式 所以觉得很奇怪,感觉不像结束後全部回收 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.67.159
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1477754816.A.64A.html
1F:推 kwpn: 呼叫fun完不会解构b1啊 10/29 23:47
2F:→ descent: 你的 linked list 是自己写的还是用 std::list 10/30 00:22
3F:→ jobsdone: link list是我自己写的 10/30 00:38
4F:→ jobsdone: 那请问呼叫解构的东西是什麽呢 10/30 00:39
5F:→ ralts: 是main跑完才解构的 10/30 00:56
※ 编辑: jobsdone (140.113.67.159), 10/30/2016 01:13:24
6F:推 kwpn: 你可以建构时也列印 10/30 01:21
7F:→ jobsdone: 我试了 只会在生成b1时 呼叫建构式 10/30 01:26
8F:推 ilikekotomi: fun的回传会呼叫copy ctor 他删掉的不是你想的b1 10/30 01:31
9F:→ ilikekotomi: http://cpp.sh/72nl 稍微改了你的code 可以跑看看 10/30 01:33
10F:→ ilikekotomi: 他解构的不是你想的b1 10/30 01:35
11F:→ ilikekotomi: 这个情况解构的是回传的物件 10/30 01:37
12F:→ jobsdone: 所以link list的情形是我没有copy constructor导致复制 10/30 01:40
13F:→ jobsdone: 同一个地址 然後直接将同一个位置delete 所以结果错误 10/30 01:40
14F:→ jobsdone: 吗 10/30 01:40
15F:→ jobsdone: 然後顺便问一下copy constructor应该和重载=不一样吧? 10/30 01:45
16F:推 ilikekotomi: copy ctor没写的话 compiler会自动生成 10/30 01:45
17F:→ ilikekotomi: 但如果你的class内有pointer的时候要自己写 10/30 01:46
18F:→ ilikekotomi: 我想错误原因很有可能是你讲的情况 10/30 01:47
19F:→ ilikekotomi: 两个不一样没错 但内容一般应该是一样的 10/30 01:47
20F:→ ilikekotomi: class有pointer要重新分配记忆体在把内容复制到 10/30 01:49
21F:→ ilikekotomi: 新的位置上 =的写法可以google copy-and-swap 10/30 01:50
22F:→ jobsdone: 感谢 我明天试看看 10/30 01:50
23F:→ ilikekotomi: 这样copy ctor写好 =就会跟着写好了 10/30 01:51
24F:推 neigence: 可以研究一下=operator 会产生一个b1的copy 10/30 12:31







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