C_and_CPP 板


LINE

※ 引述《PythonScript (Python)》之铭言: : 拍谢 问问题果然还是要有技巧 0rz : 贴 sample code 可能比较好 : https://pastebin.com/HhrqvaAz : 我原本要问的问题就是 sample code 中的 : instanceA, instanceB, instanceAPointer, instanceBPointer : 会不会有机会消失 所有区域变数离开它的 scope 後都会消失,但是你想听的答案大概不是这个。 18 行的 instanceA 在 20 行 return instanceA 後就会消失。 createInstanceA() 传回的是 instanceA 的复本,它已经不是 instanceA。 30 和 38 行的 instanceB 同理。 25 行的 instanceAPointer 是一个内部存放记忆体位址的变数,俗称为 pointer。 在 26 行 return instanceAPointer 後就会消失。 createInstanceAPointer() 传回的是 instanceAPointer 的复本, 它已经不是原本的 instanceAPointer。 45 行和 52 行的 instanceBPointer 也是同理。 不过你想听的大概不是这个,而是 25 行 new classA 造出来的 instance 是否还存在。 在 C++ 里 new 出来的东西没 delete 就是会一直存在, 只是没有 pointer 指到它的话,你就没办法 delete 它。 : (**问题1) : 主要操作的对象是 instanceB, 会担心 instanceB 身上挂的 instanceA 会消失 : 因为一直看到 C++ 的记忆体有可能会被取代, 所以要用指标 (还是这是我的误解?) 我不清楚「C++ 的记忆体有可能会被取代」这一概念你是如何获得的。 或许你需要好好说明一下。 总而言之这个说法非常奇怪,奇怪到我想知道你为什麽会有这种认知。 : 後来发现编译不会过, 有点惊呆了 : 错误是写发生在 Line 33 : Error C4700 uninitialized local variable 'instanceB' used 这照理说只是 warning,只是你开启了将 warning 视为 error 的编译选项。 : (**问题2) : 所以 classB instanceB; 还是得初始化才行吗 : 这就是板友说的有可能会无效? class instanceB 是已经初始化了,classB 的 constructor 会被唤起。 只是因为你没写,使用了编译器产生的 default constructor, 所以内部是 primitive data type 的 data members 都没有初始化到。 32 行你替 PropertOfInstanceA 设了值,但 PropertOfInstanceAPointer 没设, 可是你却打算替这样的 instanceB 制作复本,所以编译器警告了这件事。 : (**问题3) : 这样看起来 C++ 也跟 C# 一样, 必须要初始化才能用 这是你的误解。 : 看过一些 C++ code, 都是没 new 就直接用了 : 请问为什麽我会有这种错觉 @@ C# 有分 value type 和 reference type,使用上的语法几乎没分别。 C++ 的 data type 标 * 才是 pointer,标 & 才是 reference,其它都是 value type。 * 和 & 有时会被 using 或 typedef 藏起来,不过本质还是一样的。 如果你不知道 C# 有这特性,你可能得先复习一下你原本熟的 C#。 至少要能区分这两种东西,还有它们背後的原理,包括 stack 和 heap 上各有什麽。 : 还是因为使用情况不同, 所以可以不用初始化就拿来用 : 再看回 sample, 下面这个比较早先出, 为什麽编译器没有显示这个错误 : Line 17 : classA createInstanceA() : { : classA instanceA; : return instanceA; : }; 因为你的 classA 没有 data member,理由前面讲了。 : (**问题4) : 是因为 Line33 那一块有执行 : instanceB.PropertOfInstanceA = passedInstanceA; : 的关系吗 不是,反而是你还缺了帮 instanceB.PropertOfInstanceAPointer 设值的那行。 : (**问题5) : 那这样的话, sample code 里面的 instanceB : 通通都得用 instanceBPointer 才能操作罗 因为并不是这样,所以这问题就不回了。 : 拍谢 问一问都觉得自己是白痴, 我也很想有时间学跟有同事能问 0rz 我也知道在工作以後很难有时间好好学东西,但你还是得排出时间好好学。 你看起来是想依靠 C# 的知识无痛切换到 C++,结果踢到了铁板。 世界上没有这麽美好的事,你想这样做还是得先彻底了解 C# 跟 C++ 的差异才行。 如果找不到详述这些差异的学习资源,这可能比你从零开始学 C++ 还要痛。 这方面就看你的本事了,或者看看板友有没有学习资源可以提供给你。 -- Ling-hua Tseng Architect Research & Development Department Sky Mirror Technology Corporation --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.18.57 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1568337488.A.01B.html ※ 编辑: tinlans (220.135.18.57 台湾), 09/13/2019 09:25:24
1F:推 PythonScript: 感谢详尽的回覆 会好好查这些说明的内容 09/13 09:38







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

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

TOP