
Effective C++ 笔记
穹野-嘻嘻
这个作者很懒,什么都没留下…
展开
-
effective C++ 条款3 const成员函数
条款3中关于const成员函数避免重复的例子:class TextBlock{public:...const char& operator[] (std::size_t position) const {...... return text[position];}char& operator[] (std::size_t position) { return const_cast<char&>(static_cast<const TextBl.原创 2022-01-08 23:48:56 · 319 阅读 · 1 评论 -
Effective C++笔记 —— 导读及第一章
抑制隐式转换:1.1 被声明为explicit的构造函数比non-explicit的构造函数更受欢迎尽量用const、enum、inline替换#define2.1 #define:以#开头的代码行是预处理指令。预处理指令是在编译器进行编译之前进行的操作,预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理2.2 宏定义的常量是没...原创 2019-06-02 23:37:03 · 194 阅读 · 0 评论 -
Effective C++ 笔记 —— 第三章
资源就是用完之后要还给系统,资源包括内存,文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接,网络sockets可以将资源放进对象内,通过该对象的析构函数自动释放那些资源2.1 对象可以是智能指针2.2 auto_ptr通过拷贝构造函数或拷贝赋值运算符复制时,原对象会变成null,而复制所得的指针将取得资源的唯一拥有权2.3 shared_ptr有正常的复制行为智能指针转换为原始指...原创 2019-06-03 23:09:33 · 131 阅读 · 0 评论 -
Effective C++笔记 —— 第二章
拷贝构造函数和拷贝赋值运算符1.1 当类内有指针成员时,必须自己定义拷贝构造函数和拷贝赋值运算符,进行深度复制,即自己重新申请一块空间进行拷贝,防止发生浅拷贝,只是拷贝地址,delete两次会造成内存管理错误,参见《C++ Primer Plus》第435页1.2 当类内有引用成员或const成员时,必须自己定义拷贝构造函数和拷贝赋值函数,因为引用和const在指定后不允许重新赋值。co...原创 2019-06-03 23:09:47 · 107 阅读 · 0 评论 -
Effective C++笔记 —— 第四章
让接口容易被正确使用,不容易被误用设计一个新的class要考虑的问题:2.1 新type如何被创建和销毁——构造函数和析构函数以及内存分配函数和释放函数2.2 对象的初始化和赋值该有什么样的差别——构造函数和赋值运算符2.3 对象如果被以值传递会发生什么——拷贝构造函数2.4 什么是新type的合法值2.5 新type需要配合某个继承图系吗?2.6 新type需要什么样的转换吗?...原创 2019-06-03 23:09:59 · 146 阅读 · 0 评论 -
Effective C++笔记 —— 第五章
转型1.1 const_cast 通常被用来将对象的常量性转除,它也是唯一具有此能力的C++转型操作符1.2 dynamic_cast 主要用来执行“安全向下转型”(父类转为子类),也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作1.3 reinterpret_cast 意图执行低级转型,实际动作及结果可能取决于编译...原创 2019-09-11 19:15:12 · 135 阅读 · 0 评论 -
Effective C++笔记 —— 第六章
public继承是is-a的关系derived class作用域相当于base class作用域不重新定义继承而来的缺省参数值,virtual函数动态绑定,而缺省参数值却是静态绑定原创 2019-09-16 20:13:04 · 177 阅读 · 0 评论 -
Effective C++笔记 —— 第七章
以不同template参数具现化function templates会导致调用不同的函数,这便是所谓的编译器多态;哪一个重载函数被调用也是发生在编译期如果template内出现的名称如果相依于某个template参数,称之为从属名称。如果从属名称在class内呈嵌套状,我们称它为嵌套从属名称,如果解析器在template中遭遇一个嵌套从属名称,它便假设这个名称不是个类型,除非你告诉它是。比如 ...原创 2019-09-16 22:53:28 · 157 阅读 · 0 评论 -
Effective C++笔记 —— 第八章
当operator new抛出异常以反映一个未满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的set-new-handlernamespace std{ typedef void(*new_handler)(); new_handler set_new_handler(new_handler p) throw();}new_handler是个typedef,定义出一...原创 2019-09-17 15:46:34 · 135 阅读 · 0 评论