看板 C_and_CPP 關於我們 聯絡資訊
幫同學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
dendrobium:有寫default c'tor嗎? 10/21 00:27
QQ29:他應該有寫 我修改下文章 貼個code 10/21 00:31
※ 編輯: QQ29 來自: 140.113.207.187 (10/21 00:32)
LPH66:好像不會是你猜的...因為QQ裡的aa和main裡的aa不是同一個 10/21 00:41
dendrobium:可是ptr所存的位置是一樣的 default copy c'tor是 10/21 00:45
dendrobium:shadow copy 10/21 00:46
QQ29:喔可是ptr是同一個@@ 另外我為了避免他delete兩次當機 10/21 00:46
QQ29:我刻意把他ptr=NULL在delete完以後 可是還是會盪耶 10/21 00:46
dendrobium:換言之 ptr所指向的記憶體位置被delete了兩次 10/21 00:46
QQ29:之前看到 int *p=NULL; delete []p;不會擋 我測也沒盪@@ 10/21 00:47
dendrobium:沒用的 因為 copy的ptr位置 是原本那個 10/21 00:47
QQ29:對耶= = 好天真 ....一語點醒夢中人 10/21 00:48
QQ29:那我ps那段該怎麼解釋阿@@ 10/21 01:47
ledia:shallow not shadow, 用 deep 的相反 -> shallow 比較好記 10/21 08:57
dendrobium:喔喔... 沒記好...^^" 10/21 09:18