try/catch
代码应该是在一起的,你不能没有另一个。像这样的东西就是你所追求的:
A *ptr;
try {
ptr = new A();
} catch (int a) {
cout << "caught 1\n";
}
有关完整的工作示例,请参见以下程序:
#include <iostream>
class A {
private:
int a;
public:
A() { a = 7; throw 42; }
int getA() { return a; }
};
int main (void) {
A *ptr;
try {
ptr = new A();
} catch (int b) {
std::cout << "Exception: " << b << '\n';
return -1;
}
std::cout << "Value: " << ptr->getA() << '\n';
return 0;
}
有了throw 42
里面,你会看到:
Exception: 42
这意味着main
已经捕获了来自构造函数的异常。没有throw
,你会看到:
Value: 7
因为一切都奏效了。
您的代码的主要问题似乎是:
如果您尝试在构造函数中throw
,catch
则仍然需要将其放在构造函数本身中,例如:
#include <iostream>
class A {
private:
int a;
public:
A() {
try {
a = 7;
throw 42;
} catch (int b) {
std::cout << "Exception A: " << b << '\n';
throw;
}
}
int getA() {return a;}
};
int main(void) {
A *ptr;
try {
ptr = new A();
} catch (int b) {
std::cout << "Exception B: " << b << '\n';
return -1;
}
std::cout << "Value: " << ptr->getA() << '\n';
return 0;
}
这给了你:
Exception A: 42
Exception B: 42
请特别注意该try/catch
块是如何完成的并且在构造函数中。