[問題] 書上看到一題關於new的問題

看板C_and_CPP (C/C++)作者 (累人啊....)時間14年前 (2011/10/15 14:29), 編輯推噓3(307)
留言10則, 3人參與, 最新討論串1/1
class ClassB{ private: ClassA* ptr1; ClassA* ptr2; public: ClassB (ClassA val1,Class val2) :ptr1(new Class(val1)),ptr2(new ClassA(val2)){} ...(略) } 書上提到,似這樣的寫法可以以auto_ptr取代,避免new失敗造成資源的遺失 書中提到,以上面的ctor來說,new第二個有可能會失敗造成resource leak 請問這種情形很容易發生嗎?為什麼? 煩請解答,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.165.4 ※ 編輯: tyc5116 來自: 114.37.165.4 (10/15 14:31)

10/15 14:31, , 1F
就是你所想得到的 new 失敗的原因...
10/15 14:31, 1F

10/15 14:32, , 2F
??
10/15 14:32, 2F

10/15 17:04, , 3F
1. 記憶體不足會導致 new 失敗
10/15 17:04, 3F

10/15 17:05, , 4F
2. ClassA的ctor如果丟出exception也會造成new失敗
10/15 17:05, 4F

10/15 20:48, , 5F
那請問要攔到這樣的exception,在ClassA內大要怎麼寫呢?
10/15 20:48, 5F

10/15 20:49, , 6F
(感覺寫在ctor內,又覺得怪怪的..)
10/15 20:49, 6F

10/15 22:47, , 7F
你可以在ctor內寫try/catch,但這不是最適合的做法
10/15 22:47, 7F

10/15 22:48, , 8F
用 auto_ptr 或 shared_ptr 才是最不容易出錯的方法
10/15 22:48, 8F

10/15 22:49, , 9F
詳情請讀 Exceptional C++
10/15 22:49, 9F

10/15 23:35, , 10F
我覺得以我的能力,一次沒辦法同時讀太多本XD
10/15 23:35, 10F
文章代碼(AID): #1EcIX5Ex (C_and_CPP)
文章代碼(AID): #1EcIX5Ex (C_and_CPP)