2011年6月18日 (最后更新: 2011年6月18日)

替代构造方法

评分: 2.5/5 (38 票)
*****
大多数人抱怨异常。然后他们接着抱怨说,如果对象失败,异常是唯一可以进行错误检查的方法,让他们感觉是被强加的。这也许是“最好”的方法,但绝对不是唯一的方法。其中最流行的方法之一是两步构造。

1
2
3
4
5
6
class Example
{
        Example();
        bool Create();
        bool bOkay;
};


我个人认为这违反直觉。不过没关系,它被应用在我们甚至可能想使用异常的地方,比如公司代码。你经常会遇到这样的问题:“它在其他方面有好处吗?”或者“有没有任何时候我更愿意这样做,而不是一步构造?”。这两个问题的答案我都不知道。“Create”不允许对构造函数初始化列表进行优化,而构造函数本身可以。它总是有基本函数开销,因为调用次数更多。有人可能会争辩说,异常造成的开销大于两步构造函数造成的开销。这是一个有效的论点。在抛出异常时,异常确实非常消耗资源。但是,我相信异常的好处大于成本。我实际上并不知道,我从来没有费心去计算周期或进行基准测试。
我知道,这很棒。但在 C 语言中,经常有宏来包装 API 函数,比如“APICHECK(myAPIFunction(structBlahblahblah));”。这在 SFML 中的 OpenGL 和 C 语言中的其他各个领域都有使用。