《delphi高手突破》节选二

2008-04-10 02:57:56来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

完成了第三章 异常及错误处理,节选一节

构造函数与异常

这个话题在C 社区中经常会被提起,而在Delphi社区中似乎从来没有人注意过。也许由于语言的特性,使得Delphi程序员不必关心这个问题。但我想Delphi程序员也应该对该问题有所了解,知道语言为我们提供了什么而使得我们如此轻松,不必理会它。正所谓“身在福中须知福”。

我们知道,类的构造函数是没有返回值的,如果构造函数构造对象失败,不可能依靠返回错误代码。那么,在程序中如何标识构造函数的失败呢?最“标准”的方法就是:抛出一个异常。

构造函数失败,意味着对象的构造失败,那么抛出异常之后,这个“半死不活”的对象会被如何处理呢?

在此,我想读着有必要先对C 对这种情况的处理方式先有个了解。

C 中,构造函数抛出异常后,析构函数不会被调用。这种做法是合理的,因为此时对象并没有被完整构造。

如果构造函数已经做了一些诸如分配内存、打开文件等操作的话,那么C 类需要有自己的成员来记住做过哪些动作。当然,这样做对于类的实现者来说非常麻烦,因此一般C 类的实现者都避免在构造函数中抛出异常(可以提供一个诸如InitUnInit的成员函数,由构造函数或类的客户去调用它们,以处理初始化失败的情况)。而每一本C 的经典著作所提供的方案是使用智能指针(STL的标准类auto_ptr)。

Object Pascal中,这个问题变得非常的简单,程序员不必为此大费周折。如果Object Pascal的类在构造函数中抛出异常,编译器会自动调用类的析构函数(由于析构函数不允许被重载,可以保证只有唯一一个析构函数,因此编译器不会迷惑于多个析构函数之中)。析构函数中一般会析构成员对象,而

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Delphi6/7 中XML 文档的应用

下一篇:用Delphi产生一个最小的可执行程序