作者QQ29 (我爱阿蓉)
看板C_and_CPP
标题[问题] 遇到一个bug 情况里面叙述
时间Wed Oct 21 00:22:09 2009
帮同学debug
遇到一段诡异的情况
class A; //里面没有对copy cstr 或 opt= 自己定义
A p;
A temp;
p.X( temp);
这行後 temp的值就变垃圾
=============X定义类似如下=============
void X( A t)
{
A *p=new A;
*p=t;
//虽然这p会造成leak但是似乎跟遇到的问题无关
}
我检视了一下 temp完全只是copy 根本不会动到@@
为啥会有这情况发生
问题也许描述的线索太少
是想请教各位有经验的大大 是不是有什麽情况 会造成这种浅在危险
给点线索我在dede看......
谢谢
我想到一个可能情况
http://codepad.org/xSkRGNyN 但是程式应该会结束时当掉~
可是他没荡= = 不知道这原因可不可能 有时会荡有时不会
ps. 我对 copy constructor重新定义 不用预设的 这个行为都怎麽描述?
override是用在继承?~ 难道我的class 其实compiler都会改成继承某个super class
里面包所有东西或是 operator嘛?? 我这想法满怪的 想顺便问一下= = thx
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.207.187
1F:推 dendrobium:有写default c'tor吗? 10/21 00:27
2F:→ QQ29:他应该有写 我修改下文章 贴个code 10/21 00:31
※ 编辑: QQ29 来自: 140.113.207.187 (10/21 00:32)
3F:推 LPH66:好像不会是你猜的...因为QQ里的aa和main里的aa不是同一个 10/21 00:41
4F:推 dendrobium:可是ptr所存的位置是一样的 default copy c'tor是 10/21 00:45
5F:→ dendrobium:shadow copy 10/21 00:46
6F:→ QQ29:喔可是ptr是同一个@@ 另外我为了避免他delete两次当机 10/21 00:46
7F:→ QQ29:我刻意把他ptr=NULL在delete完以後 可是还是会荡耶 10/21 00:46
8F:→ dendrobium:换言之 ptr所指向的记忆体位置被delete了两次 10/21 00:46
9F:→ QQ29:之前看到 int *p=NULL; delete []p;不会挡 我测也没荡@@ 10/21 00:47
10F:→ dendrobium:没用的 因为 copy的ptr位置 是原本那个 10/21 00:47
11F:→ QQ29:对耶= = 好天真 ....一语点醒梦中人 10/21 00:48
12F:→ QQ29:那我ps那段该怎麽解释阿@@ 10/21 01:47
13F:推 ledia:shallow not shadow, 用 deep 的相反 -> shallow 比较好记 10/21 08:57
14F:推 dendrobium:喔喔... 没记好...^^" 10/21 09:18