看板 C_and_CPP 關於我們 聯絡資訊
需求是這樣的: 1.有一 Class,是專門用來當作儲存的資料結構。 2.當程式運行中,要執行刪除功能時,一旦確定刪除某筆資料, 要保證儲存資料的那個Class其解構子功能要能馬上執行。 ---------------------------------------------------- 所以我的作法大概是像這樣: Class * A = new Class[5]; //將 A 指向有五筆CLASS的陣列 → 假設要刪除的是 A[3] 這筆資料 ← Class *temp = &A[3] ; //將 temp 指向 第四筆Class Delete temp ; 如此由Class解構子中的訊息得知,那解構子的確會被執行。 ------------------------------------------------------- 在執行時都是正確的數據,但是一旦我多做幾次新增資料、刪除, 就有可能出現當機的情況:程式崩潰不動、顯現亂碼的情況。 是否是這樣的方式不夠洽當嚴謹呢? 想請問是否有比較好的方式,可以直接呼叫特定某筆CLASS的解構子, 最好是可以呼叫位於Class陣列中 的特定一筆。(像是指定陣列中的 A[3] ) 感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.45.36
james732:我會改用 vector 或 list 當作容器 會比較安全 10/19 09:01
這是因為需求指定不能用 vector 與 list …
james732:其實我覺得你用 new [] 不是搭配 delete [] 就很怪..... 10/19 09:02
因為我並不想重作整個Class陣列,希望能夠單獨刪除其中的一筆資料就好。
jonastan:那你內文中所謂新增資料的意思是...? 10/19 09:11
Class中有幾個成員 → int Phone ; 所謂的新增資料,其實就只是把資料填到裡面而已。 EX: A[0].setPhone("0123456789"); 通常在 Delete A[n] 後, 我會補上 &A[n] = new Member(); 但是不補上似乎也是正常,這邊我就不是很清楚 delete的實作方式了。 ※ 編輯: KanoLoa 來自: 122.116.45.36 (10/19 09:19)
james732:這樣混用 new [] 與 delete 跟 new 感覺就很容易出事..XD 10/19 09:36
loveme00835:&A[n] = new Member(); 這行是沒有作用的...delete 就 10/19 09:38
loveme00835:是還會呼叫每一個物件的解構子, 才來釋放記憶體, 你已 10/19 09:39
loveme00835:經先刪掉的話, 它再呼叫就變成刪兩次 10/19 09:40
KanoLoa:謝謝 !! 10/19 09:49
loveme00835:如果真的不得已要這樣做, 你可以參考std::Allocator 10/19 09:54
loveme00835:需要在一塊記憶體上即地建構/摧毀物件的時候可以用到 10/19 09:55
loveme00835:不過你要提供copy ctor, 另一個方法就是用replacement 10/19 09:56
loveme00835:new, 跟 A[n].~Class() 來作, 不過都是需要非常小心就 10/19 09:56
loveme00835:是 10/19 09:56
KanoLoa:如果變成這樣實在太慘了,甚至有本末倒置的感覺。 10/19 09:58
loveme00835:所以其實我才不管什麼爛需求...只要我有理由說出他爛, 10/19 10:00
loveme00835:打死我都不會照他的做 10/19 10:00
KanoLoa:嗯 我剛去抗議了,現在他應該很困擾 哈哈哈 10/19 10:05
purpose:Allocator,第一次知道有這東西 10/19 10:09