摘要:
RAII 类的拷贝 例如,假设你使用 C API 提供的 lock 和 unlock 函数去操纵 Mutex 类型的互斥体对象: 为了确保你从不会忘记解锁一个被你加了锁的 Mutex,你希望创建一个类来管理锁。RAII 原则规定了这样一个类的基本结构,通过构造函数获取资源并通过析构函数释放它: 客户 阅读全文
摘要:
使用对象管理资源 假设我们和一个投资(例如,股票,债券等)模型库一起工作,各种各样的投资形式从一个根类 Investment 派生出来: 进一步假设这个库使用了通过一个 factory 函数为我们提供了特定的 Investment 对象的的方法: 考虑一个 f 函数来履行以下职责: 有可能在这个函数 阅读全文
摘要:
拷贝函数 在设计良好的面向对象系统中,封装了对象内部的配件,仅留两个函数用于对象的拷贝,它们统称为拷贝函数:拷贝构造函数和拷贝赋值运算符。 考虑一个象征消费者的类,这里的拷贝函数是手写的,以便将对它们的调用记入日志: 这里的每一件事看起来都不错,实际上也确实不错——直到 Customer 中加入了另 阅读全文
摘要:
自赋值是不安全的也是异常不安全的 当一个对象赋值给自己的时候就发生了一次自赋值。 这看起来很愚蠢,但它是合法的,所以应该确信客户会这样做。另外,赋值也并不总是那么容易辨别。例如, 如果两个对象来自同一个继承体系,甚至不需要公开声明,它们就是相同的类型,因为一个基类的引用或者指针也能够引向或者指向一个 阅读全文
摘要:
赋值运算符应该返回自身的引用 赋值运算符可以穿成一串使用: 并且赋值运算符是右结合的,所以,上面的赋值串可以解析为: 这里的实现方法是让赋值返回一个引向它左侧参数的引用,而且这就是设计类时应该遵守的惯例: 这个惯例适用于所有的赋值运算符,而不仅仅是上面的标准形式: 总结 让赋值运算符返回一个引向 的 阅读全文