|
|
|
|
 如何在构造函数中因出错而返回,并且不构造对象? - dwwwww [ 2005-08-29 21:39 | 14 byte(s)]
 Re: 如何在构造函数中因出错而返回,并且不构造对象? - dwwwww [ 2005-08-30 22:24 | 36 byte(s)]
 Re: 如何在构造函数中因出错而返回,并且不构造对象? - alula [ 2005-08-30 18:02 | 393 byte(s)]
 Re: 如何在构造函数中因出错而返回,并且不构造对象? - Atu [ 2005-08-30 14:23 | 607 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
记不太清楚了,随便说说吧
1. 返回是不大可能的,但似乎可以考虑用抛出异常来实现它。
2. 如果用异常的话,又涉及到内存的分配和释放的问题,尤其是动态分配的内存
3. 比较理想的做法,就是把可能出错的代码从构造函数中独立出来,作为一个函数
使用的时候稍麻烦一点
CClass c;
if ( ! c.init() )
{
// error.
}
M$的MFC中很多类都是这么封装,并建议这么使用的,例如
CWnd wnd;
if ( wnd.Create(...) )
就是把物理窗口的创建与C++对象的创建分离出来。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
int ival;
这可以看作是构造函数的原型。
所以说, 构造函数没用返回,并且不能不构造。
然而这是C++,异常是重要的特性。你可以考虑在构造函数内抛出异常的。
如果不想使用异常,那么如果可以变通,建议参考 iostream。
std::ifstream istr("foo.txt")
if (!istr) {
fail...
}
|
|
|
----
温故知新
|
|
[Original]
[Print]
[Top]
|
|
|