Effective C++ 笔记
文章平均质量分 87
qin529
Finding exception~~
展开
-
Effective C++笔记: 设计与声明(一)
Item 18: 使接口易于正确使用,不易被误用假设一个用来表现日期的class设计构造函数:class Date {public: Date(int month, int day, int year); ...};就可能发生以下错误:Date d(30, 3, 1995); // Oops! Should be "3, 30" , not "30, 3"第二原创 2009-07-15 11:34:00 · 469 阅读 · 0 评论 -
Effective C++笔记: 构造/析构/赋值运算(二)
条款08:别让异常逃离析构函数1. 最好不要在析构函数中抛出异常,如果一个析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不让异常跑出析构函数之外)或结束程序。 2. 如果客户需要对某个操作函数运行期间抛出的异常做出处理,那么class应该提供一个普通函数(而非析构函数)来执行该操作。 条款09:不要在构造和析构函数中调用virtual原创 2009-07-10 17:23:00 · 610 阅读 · 0 评论 -
Effective C++笔记: 资源管理(二)
Item 16: 使用相同形式的 new 和 deletenew对应delete,new [] 对应 delete[]这个规则对于有 typedef 倾向的人也很值得注目,因为这意味着一个 typedef 的作者必须在文档中记录:当用 new 生成一个 typedef 类型的对象时,应该使用哪种形式的 delete。例如,考虑这个 typedef:typedef std::str原创 2009-07-10 18:36:00 · 470 阅读 · 0 评论 -
Effective C++笔记: 构造/析构/赋值运算(一)
条款05:Know what functions C++ silently writes and calls 1. 对一个空类,C++默认生成构造,析构,拷贝构造,和赋值(operate=)函数 2. 这些函数并不一定生成,而是在需要时,才会被编译器创建出来。 3. 默认的拷贝构造和赋值函数只能实现简单的拷贝,对引用或const成员变量需要自己实现拷贝构造和赋值原创 2009-07-08 22:23:00 · 609 阅读 · 0 评论 -
Effective C++笔记: 实现(二)
Item 29: 争取异常安全(exception-safe)的代码假设我们有一个类,代表带有背景图像的 GUI 菜单。这个类被设计成在多线程环境中使用,所以它有一个用于并行控制(concurrency control)的互斥体(mutex):class PrettyMenu {public: ... void changeBackground(std::istream& img原创 2009-07-21 11:13:00 · 631 阅读 · 0 评论 -
Effective C++笔记: 实现(一)
Item 26: 只要有可能就推迟变量定义 “只要有可能(as long as possible)”的含义:你不仅应该推迟一个变量的定义直到你不得不用它之前的最后一刻,而且应该试图推迟它的定义直到你得到了它的初始化参数。通过这样的做法,你可以避免构造和析构无用对象,而且还可以避免不必要的缺省构造。更进一步,通过在它们的含义已经非常明确的上下文中初始化它们,有助于对变量的作用文档化。原创 2009-07-21 11:11:00 · 588 阅读 · 0 评论 -
Effective C++笔记: 继承和面向对象设计(三)
Item 38: 通过 composition(复合)塑模出 "has-a"或 "is-implemented-in-terms-of"(根据某物实现出)composition(复合)是类型之间的一种关系,表示某种类型的对象内含其他类型的对象。例如:class Address { ... }; // where someone livesclass Pho原创 2009-07-17 18:02:00 · 1132 阅读 · 0 评论 -
Effective C++笔记: 继承和面向对象设计(二)
Item 34: 区分 inheritance of interface(接口继承)和 inheritance of implementation(实现继承)Public继承由2部分组成: inheritance of function interfaces(函数接口的继承)和 inheritance of function implementations(函数实现的继承)。 B原创 2009-07-17 18:01:00 · 612 阅读 · 0 评论 -
Effective C++笔记: 继承和面向对象设计(一)
Item 32: 确保你的public inheritance 塑模出 "is-a"关系如果你写了一个 class D ("Derived") 从 class B ("Base") 公开继承,你就是在告诉 C++ 编译器(以及你的代码的读者)每一个类型为 D 的对象也是一个类型为 B 的对象,但是反之则不然。你就是在说 B 描绘了一个比 D 更一般的概念,D 描述了一个比 B 更特殊的概原创 2009-07-17 17:57:00 · 647 阅读 · 0 评论 -
Effective C++笔记: 继承和面向对象设计(四)
Item 40: 谨慎使用 multiple inheritance(多继承)multiple inheritance(多继承)意味着从多于一个的 base class(基类)继承, 可能会导致较多的歧义。成员函数歧义:class BorrowableItem { // something a library lets you borrowpublic:原创 2009-07-17 18:04:00 · 604 阅读 · 0 评论 -
Effective C++笔记: 让自己习惯C++
Item 1: 将 C++ 视为 federation of languages(语言联邦)不要将 C++ 视为一个由相关语言组成的联邦,而非单一的语言。在每一个特定的 sublanguage(子语言)中,它的特性趋向于直截了当,简单易记。但你从一个 sublanguage(子语言)转到另外一个,它的规则也许会发生变化。为了感受 C++,你必须将它的主要的 sublanguages(子语原创 2009-07-17 13:40:00 · 882 阅读 · 0 评论 -
Effective C++笔记: 设计与声明(四)
Item 25: 考虑写出一个不抛出异常的 swap函数标准程序库中的swap行为:namespace std { template // typical implementation of std::swap; void swap(T& a, T& b) // swaps as and bs values { T temp(a)原创 2009-07-15 16:34:00 · 632 阅读 · 0 评论 -
Effective C++笔记: 设计与声明(三)
Item 23: 用非成员非友元函数取代成员函数想象一个象征 web 浏览器的类。在大量的函数中,这样一个类也许会提供清空已下载成分的缓存。清空已访问 URLs 的历史,以及从系统移除所有 cookies 的功能:class WebBrowser {public: ... void clearCache(); void clearHistory(); void removeC原创 2009-07-15 16:33:00 · 553 阅读 · 0 评论 -
Effective C++笔记: 设计与声明(二)
Item 21: 当你必须返回一个对象时,不要试图返回其引用一个函数创建一个新对象仅有两种方法:在栈上或者在堆上。 在栈上分配:栈上的生成物通过定义一个局部变量而生成。使用这个策略,你可以用这种方法试写 operator*:const Rational& operator*(const Rational& lhs, // warning! bad code!原创 2009-07-15 16:32:00 · 462 阅读 · 0 评论 -
Effective C++笔记: 资源管理(一)
条款13:以对象来管理资源为了确保资源总能被释放,我们需要将资源放入一个类中,这个类的析构函数在控制流程离开其作用域的时候会自动释放资源。 std::auto_ptr:注意:当一个 auto_ptr 被销毁的时候,会自动删除它所指向的东西,所以不要让超过一个的 auto_ptr 指向同一个对象非常重要。如果发生了这种事情,那个对象就会被删除超过一次,而且会让你的程序通过捷径进入未定原创 2009-07-10 18:04:00 · 624 阅读 · 0 评论