相关疑难解决方法(0)

C++ catch块 - 按值或引用捕获异常?

可能重复:
在C++中通过指针捕获异常

我总是通过价值来捕捉异常.例如

try{
...
}
catch(CustomException e){
...
}
Run Code Online (Sandbox Code Playgroud)

但我遇到了一些相反的代码catch(CustomException &e).这是a)罚款b)错误c)灰色区域?

c++ exception-handling

92
推荐指数
3
解决办法
5万
查看次数

在C++中通过指针捕获异常

我发现有三种方法可以捕获异常,有什么区别?

1)按价值捕获;

2)引用参考;

3)用指针抓住;

我只知道按值捕获将调用该对象的两个副本,通过引用捕获将调用一个.那么指针捕获怎么样?什么时候用指针捕捉?除了抛出一个对象,我可以抛出一个像这样的对象的指针吗?

class A {}

void f() {

  A *p = new A();
        throw p;


}
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling try-catch throw

48
推荐指数
3
解决办法
2万
查看次数

如何在堆栈上分配的异常超出了它们的范围?

在下面的代码中,基于堆栈的变量"ex"被抛出并被捕获到超出声明ex的范围的函数中.这对我来说有点奇怪,因为(AFAIK)基于堆栈的变量不能在它们被声明的范围之外使用(堆栈被展开).

void f() {
    SomeKindOfException ex(...);
    throw ex;
}

void g() {
    try {
        f();
    } catch (SomeKindOfException& ex) {
        //Handling code...
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经向SomeKindOfException的析构函数添加了一个print语句,它显示ex在f()中超出范围后被破坏但是它在g()中被捕获并且一旦它超出范围就再次被破坏.

有帮助吗?

c++ callstack exception-handling exception

23
推荐指数
4
解决办法
2431
查看次数