作者PythonScript (Python)
看板C_and_CPP
标题Re: [问题] 使用指标的时机
时间Fri Sep 13 06:14:41 2019
拍谢 问问题果然还是要有技巧 0rz
贴 sample code 可能比较好
https://pastebin.com/HhrqvaAz
我原本要问的问题就是 sample code 中的
instanceA, instanceB, instanceAPointer, instanceBPointer
会不会有机会消失
(**问题1)
主要操作的对象是 instanceB, 会担心 instanceB 身上挂的 instanceA 会消失
因为一直看到 C++ 的记忆体有可能会被取代, 所以要用指标 (还是这是我的误解?)
後来发现编译不会过, 有点惊呆了
错误是写发生在 Line 33
Error C4700 uninitialized local variable 'instanceB' used
(**问题2)
所以 classB instanceB; 还是得初始化才行吗
这就是板友说的有可能会无效?
(**问题3)
这样看起来 C++ 也跟 C# 一样, 必须要初始化才能用
看过一些 C++ code, 都是没 new 就直接用了
请问为什麽我会有这种错觉 @@
还是因为使用情况不同, 所以可以不用初始化就拿来用
再看回 sample, 下面这个比较早先出, 为什麽编译器没有显示这个错误
Line 17
classA createInstanceA()
{
classA instanceA;
return instanceA;
};
(**问题4)
是因为 Line33 那一块有执行
instanceB.PropertOfInstanceA = passedInstanceA;
的关系吗
(**问题5)
那这样的话, sample code 里面的 instanceB
通通都得用 instanceBPointer 才能操作罗
拍谢 问一问都觉得自己是白痴, 我也很想有时间学跟有同事能问 0rz
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.11.247 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1568326484.A.F6C.html
※ 编辑: PythonScript (114.33.11.247 台湾), 09/13/2019 06:18:34
1F:→ PythonScript: 知道一定要 new 之後 我好像就懂一半了@@ 09/13 08:51
2F:→ sarafciel: 没有什麽一定要new这种事 你这样写反而问题大很多 09/13 09:07
3F:→ sarafciel: 因为C++没有GC 你频繁的new就代表你要做频繁的delete 09/13 09:11
4F:→ sarafciel: 你真正的问题是没有弄清楚生命周期这件事 09/13 09:12
※ 编辑: PythonScript (114.33.11.247 台湾), 09/13/2019 09:43:29
5F:→ PythonScript: 好的 会去弄懂 09/13 09:43
6F:→ sarafciel: 我会建议你把一些建构解构子跟赋值运算子实作起来 09/13 10:45
7F:→ sarafciel: 然後在里面把物件的位址给印出来 09/13 10:46
9F:→ sarafciel: 你就可以看到像那个B因为new了没有delete 09/13 10:49
10F:→ sarafciel: 所以destructor没有执行到 这个问题你原文的code也有 09/13 10:49