[問題] 全域物件的解構

看板C_and_CPP作者 (div)時間15年前 (2011/02/12 00:21), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/4 (看更多)
跟姊姊的同學借帳號發問,這問題困擾我好久了 >_< 各位大大,請問.. 我用物件宣告一個陣列,如下(部分程式): class apple_event: fruit { friend int A(); friend double B(); friend void C(); // 原本這邊有的五個函式,其中ABC跟問題沒關係 friend void part_1(); friend void part_2(); friend void part_3(); public: void get(); void push(int); void check(); ~apple_event() {delete [] condition;} private: int condition[2]; int flag; }; apple_event station[10000]; 由於手上的只有大一學c++時的簡單用書,書上在class裏頭對於解構的講解少之又少 稍微爬了一下文,還是沒有找出疑問,所以想請板上大大幫忙解惑 >"< 主要問題有 1. 這個函式原本程式可以執行沒有問題 可是自從我加入 ~apple_event() {delete [] condition;} 這兩行 之後只要執行到就會錯,請問該如何寫才正確呢? (不加解構兩行就不會有錯) 是因為condition是陣列的關係嗎? 我看書本上寫說陣列解構不用指名陣列元素數目 到底問題是出在那呢 =_= 2. 我的station[]是宣告在全域變數的位子,請問不是應該程式全部執行完才會解構嗎? (或是主程式執行完) 為什麼我連主程式中的while迴圈都還沒跑完,就出現錯誤了呢? 請問我的station[]陣列到底是何時建構又何時解構呢? 書本沒有宣告在全域的位子,所以我讀書的時候一直不是很懂... 3. 我的程式有大量的運算,所以每次開始run大概兩三分鐘以後, 程式速度會慢到讓我在電腦桌前面偷偷打瞌睡....(根本還沒run超過1%...) 我以為是因為記憶體沒有被釋放掉,一直重複使用、計算的緣故 所以想要寫成class,然後用解構去解決這個問題,希望速度可以變快~~(灑花) 這樣問有點怪...請問我想的是正確的嗎? 或是有什麼其他原因會造成,程式計算速度越拖越慢呢? 4. 我的主程式長這樣 int main{ while (now < end_time) { switch (event_ID()) { case 0: part_1(); break; case 1: part_2(); break; case 2: part_3(); break; }} 其中part_1、part_2、part_3都是計算的過程, 中間也不斷在取用跟存取class裏頭的condition[2]跟flag兩個數值 請問我的解構,會不會影響這兩者的計算,我好怕我不小心讓計算錯誤...>_< 那我該如何寫才能確實釋放記憶體,讓程式變得更完善呢? 請大大幫幫忙了 ( ̄▽ ̄#)﹏﹏ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.17.118 ※ 編輯: divinity47 來自: 123.204.17.118 (02/12 00:22)

02/12 00:49, , 1F
最後兩句話 可以用 Valgrind 版上yoco大有寫過教學文
02/12 00:49, 1F
文章代碼(AID): #1DLM8B6p (C_and_CPP)
文章代碼(AID): #1DLM8B6p (C_and_CPP)