C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) win10 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) vs 2017 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 小弟是C++新手也是第一次发文 请鞭小力一点>< 我设计一个class Test中有宣告一个 int *arr 让他在constructor中可以分配记忆体 像 arr=new int[10] 然後我也用了destructor 会把arr delete掉 另外我也设计了一个成员函式 会先复制本身数据到temp中 再把temp.arr记忆体中的值都加一 并回传temp给另一个Test型态的变数 像 b=a.addOne(); 我想问的是 b在使用operator=设值的时候 不是会用到a.addOne()回传的东西吗 但它在离开了addOne()函式的时候不是就应该会被destructor delete掉了吗 为甚麽b还可以存取 喂入的资料(Input):预期的正确结果(Expected Output): 错误结果(Wrong Output): 程式码(Code):(请善用置底文网页, 记得排版) http://codepad.org/2QRdsFU5 补充说明(Supplement): --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 58.114.157.44
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1517134024.A.1AF.html
1F:推 jerryh001: 回传出来的是复制品 另外第10行有写错 01/28 18:16
已修正 所以b在用的是a.addOne()回传值的复制品吗? 但它的arr那边不也是指向同一个位址 所以就算被delete掉也还是可以存取罗? ※ 编辑: nicknick0630 (58.114.157.44), 01/28/2018 18:29:46 ※ 编辑: nicknick0630 (58.114.157.44), 01/28/2018 18:33:35
2F:推 LPH66: addOne() 回传的是 temp 的复制品, temp 被删了没错 01/28 19:39
3F:→ LPH66: 但那个复制品传给了 b.operator = 去复制过去 01/28 19:40
4F:→ phishingphi: C++17中这个case(应该)符合 guaranteed copy elison. 01/28 20:20
5F:→ phishingphi: 见 P0135R1 或 [class.copy.elision]。但我自己的疑 01/28 20:21
6F:→ phishingphi: 问是那个 new 会不会导致那个 criteria 不符合... 01/28 20:21
7F:推 jerryh001: 你有写copy ctor 所以arr是不同地址 你可以印出来看看 01/28 21:09
8F:→ jerryh001: 另外delete後再存取是未定义行为 不管实际上读不读的到 01/28 21:11
9F:→ jerryh001: 资料 都不应该做 01/28 21:11
感谢P大的提点 小弟我有有做了一些测试查看内存位址得到一些结论 b = a.addOne(); 等同於 (这个步骤应该就是copy elision) Test temp(a.addOne()); b=temp; 这边 temp(a.addOne()) a.addOne()回传的tem会在函式addOne() return的阶段就传入 temp(a.addOne()) 等到复制完後(使用copy constructor)才执行destructor把tem.arr delete掉 所以也不会有delete 後再去存取的这个问题 如果不是这样的话还请大大们跟我说哪里错@@ ※ 编辑: nicknick0630 (58.114.157.44), 01/28/2018 23:00:09
10F:推 LPH66: 其实只要你有遵守好 rule of three/rule of five 01/29 01:21
11F:→ LPH66: 把对应的东西通通实作正确那其实不管怎麽呼叫都没问题 01/29 01:21







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

请输入看板名称,例如:e-shopping站内搜寻

TOP