[問題] vector<T>中erase()與dtor呼叫時機的關係

看板C_and_CPP (C/C++)作者 (海豹)時間13年前 (2013/06/06 12:41), 編輯推噓2(205)
留言7則, 6人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Windows codeblock12.11 GCC 4.7.1 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 程式碼(Code):(請善用置底文網頁, 記得排版) Q1: http://ideone.com/qhnWs8 Q2: http://ideone.com/szu4Jh ------------------------------------------------------------- 問題1: 為什麼vector中呼叫destructor的順序 跟一般物件呼叫destructor的順序不同? 物件不是會保持"後進先出"的原則嗎? 問題2: 為什麼Avec.erase(iter)呼叫到的destructor竟然是 ~A() called and cptr is 3? iter現在指到的物件不是應該是a1嗎? 接下去的destructor順序雖然a1似乎是不見了 但是a3的內容似乎也被delete掉了 -------------------------------------------------------------- 以上兩個新手問題還請各位大大幫忙!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.12.208.228

06/06 13:04, , 1F
怎麼版標兩個關鍵詞這裡都有了XD
06/06 13:04, 1F

06/06 13:06, , 2F
XD
06/06 13:06, 2F

06/06 13:07, , 3F
問題1:沒有保證解構的順序 問題2:你strcpy後沒加'\0'
06/06 13:07, 3F

06/06 13:21, , 4F
Q2 需要 operator=
06/06 13:21, 4F

06/06 13:21, , 5F
阿.. 下面有了 Q_Q
06/06 13:21, 5F

06/06 13:25, , 6F
小金慢了 XD
06/06 13:25, 6F

06/06 19:10, , 7F
阿...第一次發文沒注意到 辛苦版主幫我改標題 XD
06/06 19:10, 7F
文章代碼(AID): #1Hi1BgQg (C_and_CPP)
文章代碼(AID): #1Hi1BgQg (C_and_CPP)