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

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個贊
推薦的方法是按值拋出并按引用捕獲。
您的示例代碼將拋出一個指針,這是一個壞主意,因?yàn)槟鷮⒉坏貌辉诓东@站點(diǎn)上管理內(nèi)存。
如果您確實(shí)覺得應(yīng)該拋出一個指針,請使用諸如的智能指針shared_ptr
。
無論如何,Herb Sutter和Alexei Alexandrescu在我解釋的C ++編碼標(biāo)準(zhǔn)書中對此做了很好的解釋。

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