《Imperfect C++中文版》——第2章 对象生命期

第2章 对象生命期

Imperfect C++中文版
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-08-02 00:16:05

《Imperfect C++中文版》——第2章 对象生命期的相关文章

《Imperfect C++中文版》——2.1 对象生命周期

2.1 对象生命周期 Imperfect C++中文版 每个C++对象的生命周期都分为4段:不存在.部分构造.实例化.部分析构[Stro1997].此外,一个对象所占用的空间必须在该对象构造之前就分配好,并且在该对象析构之后被释放.1 对象可以以下例4种标准方式诞生. 全局对象,包括真正的"全局"对象.位于名字空间中的对象,以及作为类静态成员的对象,生存于任何函数的作用域之外.它们通常在main()函数被执行之前就已经构造完毕,并且在main()结束之后被自动销毁(见11.1节).它们

《Imperfect C++中文版》导读

前 言 Imperfect C++中文版 或许我不像喜欢我的孩子们那样喜爱C++,甚至或许我对C++的喜爱都比不上我对骑自行车在坡度为32°.光滑度为10%的柏油路上爬坡的热衷,1尽管有时这些喜爱之情的确十分接近.我庆幸我有这样的人生,让我得以将生命中的部分时间用来实践或阐释Frederick P.Brooks的名言:"尽量发挥想象力进行创造".我更要感激的是我能够跟这门如此强大.危险却又诱人的语言相伴. 这些话听起来似乎蛮华丽动听,但你可能是因为看到本书的书名才买下它的,以为本书是一

《Imperfect C++中文版》——第1章 强制设计:约束、契约和断言

第1章 强制设计:约束.契约和断言 Imperfect C++中文版在我们设计软件时,我们希望软件根据设计而进行使用.这并非一句空话.在大多数情况下,很容易发生以意料之外的方式来使用软件,而这么做的结果往往是令人失望的. 大多数软件的文档几乎都是不完整,甚至是过时的,我坚信你也有这方面的经验.这并非单纯的错误或缺失,"如果还有比没有文档更糟的情形,那就是文档是错误的"[Meye1997].如果被使用的组件比较简单,使用得当,或者说是标准的或被普遍使用的,那么没有文档倒也不是什么大问题.

《Imperfect C++中文版》——1.3 运行期契约:前置条件、后置条件和不变式

1.3 运行期契约:前置条件.后置条件和不变式 Imperfect C++中文版 "如果例程的所有前置条件(precondition)已经被调用者满足了,那么该例程必须确保当它完成时所有后置条件(postconditions)(以及任何不变式)皆为真."--Hunt and Thomas, The Pragmatic Programmers [Hunt2000]. 如果我们无法执行编译期强制,那么还可以采用运行期强制.运行期强制的一个系统化的实现途径是指定函数契约.函数契约精确定义了在

《Imperfect C++中文版》——2.3 MIL及其优点

2.3 MIL及其优点 Imperfect C++中文版 你会在构造函数中进行初始化的东西可能包括以下7种: 1.直接父类. 2.虚基类.1 3.常量型成员变量. 4.引用型成员变量. 5.non-const.non-reference.但"具有非缺省构造函数的用户自定义类型"的成员变量. 6.non-const.non-reference的标量型成员变量,我们可以把它们看成"常规的"成员变量. 7.数组作为成员变量. 在这7种中,只有最后一种,即数组型成员变量,不

《Imperfect C++中文版》——2.2 控制你的客户端

2.2 控制你的客户端 Imperfect C++中文版 C++的一个重要且强大的特性是在编译期实施访问控制的能力.通过使用public.protected以及private[Stro1997]访问限定关键字,以及适当地使用friend关键字,我们可以控制客户端代码使用我们的类型的方式.这种控制在很多方面都是极其有用的,本书中就有很多技术利用了这种能力. 2.2.1 成员类型 控制外界对你的类实例的操纵的强大方式之一,是将类的成员声明为const和/或引用类型.因为常量和引用(以及const引用

《Imperfect C++中文版》——1.2 编译期契约:约束

1.2 编译期契约:约束 Imperfect C++中文版本章讲述编译期强制,通常它也被称为"约束(constraints)".遗憾的是,C++并不直接支持约束. Imperfection: C++ 不直接支持约束.C++是一门极其强大和灵活的语言,因此很多支持者(甚至包括一些C++权威)都会认为本节描述的约束实现技术已经足够了.然而,作为C++和约束的双重拥护者,我必须提出我的异议(由于一些很平常的原因).虽然我并不买其他语言鼓吹者的账,然而我同样认为阅读因违反约束而导致的编译错误信

《Imperfect C++中文版》——1.4 断言

1.4 断言 Imperfect C++中文版 在我看来,断言并非一个良好的报错机制,因为它们通常在同一个软件的调试版和发行版中的行为有着极大的差异.虽说如此,断言仍然是C++程序员确保软件质量的最重要的工具之一,特别是考虑到它被使用的程度和约束.不变式一样广泛.任何关于报错机制的文档,如果没有提到断言的话肯定不能算是完美的. 基本上,断言是一种运行期测试,通常仅被用于调试版或测试版的构建,其形式往往像这样: #ifdef NDEBUG # define assert(x) ((void)(0)

CORBA对象生命周期之早期和后期绑定

在伺服对象生命周期事件的定义中,已经说过伺服对象通过CORBA对象的ID依附于CORBA对象.下面会为BOA和POA代的ORB而分别讨论CORBA对象I D的概念,然而,伺服对象和CORBA对象之间的绑定的思想还是很重要的.对象适配器必须提供必需的接口,使我们能执行这种绑定.问题在于,是什么触发了真正的绑定:是某种标准应用程序逻辑还是来到的请求?下面首先介绍早期绑定,然后讨论后期绑定,或者说是通过命令的绑定. 1. 早期绑定 早期绑定通常描述的是某种标准应用程序逻辑通过对象适配器来执行绑定的情况