之前抛出异常防止构造C++通过构造函数体
我想一个类来throw
其构造身体的大括号{
利用自己的成员函数,以防止施工前的异常。我所定义的成员函数,它的目的仅仅是无条件throw
异常,与任意选择的非void
返回类型和一个伪数据成员,其类型返回类型相匹配,这样我可以通过构建与该数据成员触发throw
在构造函数初始化器列表中调用所述成员函数。这是有效的,但并不优雅,因为在非玩具类中,虚拟变量不能用于其他目的,只能为成员函数运行提供借口,并且成员函数的非返回类型除了用于其他用途外,有一个借口可以通过相同类型的虚拟数据成员的构造函数来调用它。
这个玩具编译但不优雅:
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
没有虚拟变量,是有办法的大括号之前抛出一个异常{
的构造函数体?
看到这个线程:http://stackoverflow.com/questions/2672398/throw-exception-from-constructor-initializer? – taocp 2013-03-28 02:23:30
@Ken White,我不是特别想创建一个单例。一般来说,我只想知道如何在构造函数的正文之前防止构造。 – CodeBricks 2013-03-28 02:25:16
明白了。 :-)我看到@SongWang发布并删除了我的评论的链接;一定发生了,就像你回答。 – 2013-03-28 02:26:30