[問題] 遇到一個bug 情況裡面敘述

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2009/10/21 00:22), 編輯推噓5(509)
留言14則, 4人參與, 最新討論串1/1
幫同學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

10/21 00:27, , 1F
有寫default c'tor嗎?
10/21 00:27, 1F

10/21 00:31, , 2F
他應該有寫 我修改下文章 貼個code
10/21 00:31, 2F
※ 編輯: QQ29 來自: 140.113.207.187 (10/21 00:32)

10/21 00:41, , 3F
好像不會是你猜的...因為QQ裡的aa和main裡的aa不是同一個
10/21 00:41, 3F

10/21 00:45, , 4F
可是ptr所存的位置是一樣的 default copy c'tor是
10/21 00:45, 4F

10/21 00:46, , 5F
shadow copy
10/21 00:46, 5F

10/21 00:46, , 6F
喔可是ptr是同一個@@ 另外我為了避免他delete兩次當機
10/21 00:46, 6F

10/21 00:46, , 7F
我刻意把他ptr=NULL在delete完以後 可是還是會盪耶
10/21 00:46, 7F

10/21 00:46, , 8F
換言之 ptr所指向的記憶體位置被delete了兩次
10/21 00:46, 8F

10/21 00:47, , 9F
之前看到 int *p=NULL; delete []p;不會擋 我測也沒盪@@
10/21 00:47, 9F

10/21 00:47, , 10F
沒用的 因為 copy的ptr位置 是原本那個
10/21 00:47, 10F

10/21 00:48, , 11F
對耶= = 好天真 ....一語點醒夢中人
10/21 00:48, 11F

10/21 01:47, , 12F
那我ps那段該怎麼解釋阿@@
10/21 01:47, 12F

10/21 08:57, , 13F
shallow not shadow, 用 deep 的相反 -> shallow 比較好記
10/21 08:57, 13F

10/21 09:18, , 14F
喔喔... 沒記好...^^"
10/21 09:18, 14F
文章代碼(AID): #1AtUEqdx (C_and_CPP)