[問題] 關於書中例外的抑制

看板C_and_CPP作者 (魯塞)時間12年前 (2013/08/15 13:08), 編輯推噓3(3011)
留言14則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 很久沒用過這個技巧. 印象中在某本書裡看到例外的抑制, 但是不知道c++規範是不是有更改? 我現在無法成功抑制例外. 餵入的資料(Input): ... int abc; cin >> abc; ... int *x = new(nothrow) int[abc]; if (x==NULL) { ... 預期的正確結果(Expected Output): x == NULL 錯誤結果(Wrong Output): x== 系統不定數值 程式碼(Code):(請善用置底文網頁, 記得排版) 在上面 補充說明(Supplement): no -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.111.139

08/15 13:44, , 1F
這不就是new成功了嗎?
08/15 13:44, 1F

08/15 13:56, , 2F
看起來就是一副成功的樣子 例外?
08/15 13:56, 2F

08/15 14:52, , 3F
而且 new() 這個很像 placement new 的語法 @@
08/15 14:52, 3F

08/15 14:58, , 4F
你呼叫no throw版本的 沒new失敗 就不會是null阿
08/15 14:58, 4F

08/15 15:27, , 5F
可以用手動的abc讓他失敗. 想請問的重點是,null出的來嗎?
08/15 15:27, 5F

08/15 15:28, , 6F
如果出不來,那就是某本書裡說錯了,也可能是C++規範不同了
08/15 15:28, 6F

08/15 20:38, , 7F
系統呼叫 operator new() 之後如果發生錯誤會立刻丟出異常,
08/15 20:38, 7F

08/15 20:39, , 8F
沒有機會把結果回傳給 x,如果真的要確定配置失敗要回傳 0
08/15 20:39, 8F

08/15 20:41, , 9F
可以在一開始時將 0 指定給 x,如果配置成功就不為 0,
08/15 20:41, 9F

08/15 20:43, , 10F
丟出異常的話那結果還是 0 做為判斷依據.
08/15 20:43, 10F

08/15 20:44, , 11F
可以改成這樣 :
08/15 20:44, 11F

08/15 20:44, , 12F
int *x = 0;
08/15 20:44, 12F

08/15 20:45, , 13F
x = new int[abc];
08/15 20:45, 13F

08/15 20:47, , 14F
一旦配置動作出現錯誤,x 的值不受影響.
08/15 20:47, 14F
文章代碼(AID): #1I369GeO (C_and_CPP)