我发现有三种捕获异常的方法,有什么区别?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 关注
- 424 浏览
添加回答
举报
0/150
提交
取消