这似乎是一个奇怪的问题。我目前正在将某些对象从两步初始化方案转移到一步初始化方案。基本上将成员函数中所做的事情.initialize()
.terminate()
转移到构造函数和析构函数中。
我的问题是,重要的是要知道这些类是否正确初始化了某些取决于外部因素的属性。
一个例子是我的 Window 类,它创建了一个 WinAPI 窗口。以前使用两步法,我会initialize()
返回一个布尔值,说明窗口是否创建正确。
if(myWindow.initialize())
{
// proceed with application
}
else
{
// exit
}
无论如何都可以从构造函数传递这些信息,而无需创建和调用第二种方法,例如didMyWindowInitializeCorrectly()
?
起初我希望类似的东西
if(Window *myWindow = new Window)
{
// proceed with application
}
else
{
// exit
}
但这不起作用,因为即使窗口创建失败,Window 对象仍将实例化。
让构造函数抛出异常然后捕获它并继续的唯一解决方案是什么?我查看了很多线程,人们对 C++ 异常的看法似乎很分裂,所以我不确定什么是最好的方法。
反正有没有用 if 语句来处理这种情况?