C++
我希望一个类throw
在其构造函数的主体的左大括号之前出现异常,{
方法是使用它自己的成员函数来防止构造。我定义了一个成员函数,其目的只是无条件地throw
异常,具有任意选择的非void
返回类型和一个类型与该返回类型匹配的虚拟数据成员,以便我可以throw
通过调用构造这个数据成员来触发构造函数初始化列表中的成员函数。这可行,但并不优雅,因为在非玩具类中,虚拟变量没有其他用途,只能为成员函数运行提供借口,并且成员函数的非void
返回类型没有其他用途,只是有一个借口可以由相同类型的虚拟数据成员的构造函数调用。
这个玩具可以编译但并不优雅:
class Toy
{
public:
Toy() : dummy(preventer()) {}
private:
int dummy;
int preventer() {throw -1; return 0;}
};
#include <iostream>
int main()
{
try
{
Toy t;
}
catch (const int& e)
{
std::cout << "caught the exception\n";
}
return 0;
}
控制台输出:
caught the exception
{
如果没有虚拟变量,有没有办法在构造函数主体的左大括号之前抛出异常?