EFFECTIVE C++
极致 for 简单
贵在坚持
展开
-
构造、析构、copy
item1:view C++ as federation of languages. C++被认为是四个次语言的集合: C。预处理器、内建类型、数组、指针等概念 面向对象C++。类、封装、继承、多态、虚函数、动态绑定等概念 模板C++。泛型编程 STL。模板库,包含容器、迭代器、算法、函数,并对做他们之间的关系做出了规约。 一个次语言适用的规则在另一个次语言中就不一定使用了。因此当将C++分为四个...原创 2019-04-05 12:35:55 · 104 阅读 · 0 评论 -
资源管理篇
对资源的定义:能以某一方式获得到资源,并保证在不需要的时候释放掉资源。 我们可以使用的资源有哪些呢? 1、动态内存,这里我们需要进行管理的内存也仅是在堆中获取的动态内存,局部和静态内存压根就不需要我们管理!管理好动态分配的内存,不需要时就要释放掉,否则导致内存的泄漏。 2、文件描述器 3、互斥锁 4、数据库连接等等 目前对后三个不是很了解,这里主要实现对于动态内存的管理! item13:uses ...原创 2019-04-05 18:19:31 · 112 阅读 · 0 评论 -
设计与声明
item18:make interfaces easy to use correctly and hard to use incorrectly. 对于所设计出的接口,我们要保证客户调用时能产生其期望的效果(重在逻辑上)才可以通过编译!否则不予编译过! 客户在调用接口时可能犯什么类型的错误? 1、接口多个参数且类型一样时(针对基本类型!!!),可能客户传递实参的顺序与接口希望获得的形参顺序不一致!...原创 2019-04-09 19:15:01 · 132 阅读 · 0 评论 -
实现
item26:postpone variable definitions as long as possible. 定义对象将带来两个操作:调用构造函数和析构函数!必须需要使用对象时再定义对象才是高效的!对于一个抛出异常的函数来说(如下图),早早定义的对象可能还没被使用到函数就抛出了异常,白白浪费了构造函数、析构函数的调用! 修改一下吧! 定义对象时,相较于先是调用默认构造函数再为对象赋值来说,...原创 2019-04-12 22:52:00 · 133 阅读 · 0 评论 -
继承与面向对象设计
item32:make sure public inheritance models “ is -a” 面向对象编程最最重要的准则之一是!公有继承是is-a关系!由于是is-a的关系,才可以在本该使用基类类型对象的地方使用派生类对象。私有继承就不具有这个特性。 创建一个is-a的继承关系时,继承类的设计总是存在不现实的地方,如何处理这种不现实的状况? 某一个特性(方法)并不适用于所有派生类类型,...原创 2019-04-22 14:48:17 · 135 阅读 · 0 评论 -
模板与泛型编程
面向对象世界中,显式接口和运行期多态(虚函数该被哪个函数所绑定)为特色!泛型编程世界中,(参数类型)隐式接口和编译期多态为特色,显示接口和运行期多态仍然有! 显式接口,编译器通过查看类型的头文件得知;隐式接口,编译器通过模板函数定义可确定参数类型的隐式接口,参数、返回值类型更为宽泛!通过模板函数内的定义(作用于类型参数对象上的方法可确定),但是约束并没有强,隐式接口返回类型范围更为宽泛,那么在编译...原创 2019-04-23 18:45:50 · 153 阅读 · 0 评论