我發現有三種捕獲異常的方法,有什么區別?1)抓住價值;2)通過引用捕獲;3)被指針抓??;我只知道按值捕獲將調用該對象的兩個副本,按引用捕獲將調用一個對象。那么指針捕獲又如何呢?何時使用指針捕獲?除了拋出一個對象,我還能拋出一個指向這樣的對象的指針嗎?class A {}void f() { A *p = new A(); throw p;}
3 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
推薦的方法是按值拋出并按引用捕獲。
您的示例代碼將拋出一個指針,這是一個壞主意,因為您將不得不在捕獲站點上管理內存。
如果您確實覺得應該拋出一個指針,請使用諸如的智能指針shared_ptr
。
無論如何,Herb Sutter和Alexei Alexandrescu在我解釋的C ++編碼標準書中對此做了很好的解釋。

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
捕獲遵循正常的分配兼容性規則,也就是說,如果您拋出一個值,則可以將其捕獲為值或引用,但不能將其捕獲為指針。如果拋出指針,則只能將其作為指針(或對指針的引用...)來捕獲。
但是拋出指針并沒有任何意義,只會引起內存管理的麻煩。因此,通常應遵循按值拋出的規則,按引用捕獲的規則,如Gregory所述。
- 3 回答
- 0 關注
- 456 瀏覽
添加回答
舉報
0/150
提交
取消