作者Arim (Arim5566)
看板C_and_CPP
標題[問題] 請問一下destructor
時間Wed Jun 30 14:59:16 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
destructor會連續呼叫
希望得到的正確結果:
destructor在每次物件被消滅的時候只需要呼叫一次
程式跑出來的錯誤結果:
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
dev c++ ,win7
有問題的code: (請善用置底文標色功能)
http://nopaste.csie.org/5819f
補充說明:
各位板友好,小弟想請問一下
就是我的object在第一次被消滅之後會call一次destructor
我的object的宣告是寫在main的while(1)裡面
每次執行完這個while block的時候我的object會被消滅
這是ACM10066的題目
http://www.tcgs.tc.edu.tw/~sagit/luckycat/q10066.htm
我第一次輸入完畢之後 會呼叫一次的destructor
但是第二次之後會連續呼叫兩次..
第三次會連續呼叫三次..
在某些情況下我的程式會出錯..
我的疑問是照我這樣的寫法destructor應該每次都只會呼叫一次,不太懂為甚麼會
有這種累加的情形?
請板友們不吝指教小弟一下 非常感謝^^
--
~宅男的四個徵兆~
∠□ ○ ! * \○/ ★ (○ ?
╦╦└□ " ○□═ □ □>
║║√√ ╦══╦ ∥ |\
一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.240.165
推 jerohands:多一行 設成 NULL 試試 06/30 15:10
→ jerohands:你有定義 copy constructor 嗎 06/30 15:12
→ jerohands:你在呼叫 vector 的 push_back 是建立一個"副本"給它 06/30 15:12
→ jerohands:已經不是你原先的建立的物件 06/30 15:13
→ Arim:請問樓上大大的想法是說,多消滅的那個是副本?那照理說每次消 06/30 15:59
→ Arim:滅的是兩個,一個是原本的 ,一個是副本,可是我會有累加的情形 06/30 15:59
→ Arim:而不是每次都固定兩個,還是我的理解錯誤? 06/30 15:59
→ jerohands:是用的容器的問題 06/30 16:58
→ jerohands:vector的elem改存指標,物件改為物件指標用new的方式 06/30 16:59
→ jerohands:這樣刪除的就只是指標的副本而不是指標指的記憶體區塊 06/30 16:59
→ jerohands:最後結束前 針對容器內的指標作delete動作 06/30 17:02
→ jerohands:注意 new 和 delete 的次數要相等 06/30 17:02
→ jerohands:更正 刪除的是原先的指標,vector 存的是指標副本 06/30 17:05