- 博客(38)
- 收藏
- 关注
原创 Effective C++(17)
当operator new 无法满足内存申请时,就会不断调用new-handler,直到找到足够内存,所以要如何设计一个new-handler只需要每个class提供自己的set_new_handler和operator new即可做到每个class专属的new-handlerEg.Nothrow new 是一个颇为局限的工具,因为它只适用于内存分配:后继的构造函数调用还是可能抛出异常。
2023-11-06 21:07:44
85
原创 Effective C++(16)
如图,iterator_traits可以对不同的iterator进行萃取,对于指针或者class实现的iterator进行不同操作。这其中的iterator_category就是用来确认iterator的分类例如:deque和list采用的不同类型的iterator。
2023-11-05 16:28:55
78
原创 Effective C++(15)
对于smartptr(智能指针),如果以带有base-derived 关系的B,D两类型分别具现化某个template。如果你声明 membertemplates 用于"泛化copy构造函数"或"泛化copy assignment操作",你还是需要声明正常的copy构造函数和copy assignment操作符。当我们编写一个class template,而它提供之与此template相关的函数支持所有参数之隐式类型转换时,请将那些函数定义为class template内部的friend函数。
2023-11-03 22:25:21
76
原创 Effective C++(14)
class和template都支持接口和多态,而class的接口是explicit的,对于template而言,接口时implicit的。运行期多态和编译器多态类似于绑定哪个virtual函数和使用哪个重载函数的区别。
2023-11-02 21:03:01
76
原创 Effective C++(13)
Private 继承意味 implemented-in-terms-of(根据某物实现出)。但是遇到implemented-in-terms-of时,应该尽可能使用composition(复合),必要时才使用private代替private继承的方式也有很多,除了composition以外还可以在类里定义一个public继承类并封装成private。(这样可以阻止在其derived class中重新定义virtual函数)那么什么情况会使用private继承?
2023-11-02 00:15:38
44
原创 Effective C++(12)
有代码如下此时pB->mf()和pD->mf()调用的mf函数不同,因为non-virtual函数使用的是静态绑定,一个使用的是B::mf(),另一个使用的是D::mf()。而如果在mf前加上virtual,不管把x定义成B还是D的指针,调用的mf()都是D::mf()
2023-10-31 15:58:14
53
原创 Effective C++(11)
如图,derived class的mf1和mf3函数会把base class中的mf1和mf3全部函数“替换掉”,也就是说,以下代码是不能通过编译的因为derived class中的mf1和mf3函数没有可以接受一个int值的重载形式。如果需要base class中的重载形式,需要更改代码这样执行上述代码就不会出问题了但是上述情况是在使用public继承下的方式,如果是private继承下这么做可能是有意义的。
2023-10-30 23:04:41
59
原创 Effective C++(10)
1.inline和function template并不绑定。2.你声明inline!= 编译器将此函数进行inline的操作3.应该把inline函数设置在一些小型,被频繁调用的函数上。
2023-10-29 17:07:50
53
原创 Effective C++(9)
如上图所示代码,设计一个矩形的class,其中upperLeft和lowerRight返回其左上和右下点的坐标。但是这样的设计会导致Point的坐标不再是private,客户可以通过此函数更改矩阵。原因在于这两个函数返回的是reference,例如以下代码用户就可以通过这样的方式更改upperLeft点的坐标,但是upperLeft函数后面加了const,按理说是不能更改的,这违背了设计的意愿。ulhc和lrhc变为public的原因正是这两个函数返回了他们的reference。
2023-10-29 00:40:13
51
原创 Effective C++(8)
尽量再需要使用变量之前才去定义变量,如果在之前定义可能会用不上,但是仍然要承受其构造和析构的成本尽可能跳过无意义的default构造过程,如果有可能,直接使用copy构造或者赋值构造等。
2023-10-27 21:04:51
55
原创 Effective C++(7)
pass-by-value可能会调用多个析构/构造函数产生不必要的麻烦,而pass-by-reference本质上是指针。
2023-10-26 21:01:07
46
原创 Effective C++(5)
自己实现copy构造函数或者copy assignment操作符是可能会出现的问题2:1.复制不全,可能在成员中加入了新类后未复制2.未derived class编写copying时会忘记复制其base class一定要让derived class的copying函数调用base class的copying 函数!(因为base class中的内容一般为private,无法直接访问,直接使用copying函数即可)
2023-10-20 15:58:07
54
原创 Effective C++(4)
原因:构造derived class时会先构造一个base class,此时derived class还没有构造,调用的virtual函数只能来自base class。析构同理,会先析构derived class,再析构base class。
2023-10-20 00:29:53
48
原创 Effective C++(3)
在创建类时,如果自己不定义默认构造,编译器会构造default构造函数,copy构造函数,copy assignment操作符和析构函数。一般情况下编译器默认的析构函数是non-virtual,除非该类继承自base class的析构函数是virtual如果类中成员有reference(引用)或者const,则编译器无法生成默认的copy assignment,只能自己重载。
2023-10-18 13:12:37
55
原创 Effective C++ (2)
解决方案:把non-local static对象变为local static 对象,把non-local static对象搬到自己的专属函数里。这些函数返回一个reference指向它所含的对象。的初始化次序无明确规定,然而在初始化一些non-local static对象时,可能会使用其他编译单元的non-local static 对象。如果成员变量是const或reference,则一定需要初始化,不能赋值。C++ 规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。分清楚赋值操作和初始化操作。
2023-10-17 15:57:29
47
原创 CPP学习笔记
一般情况下,class的专属常量只需要声明式,就像:只要不取地址是不需要定义式的。如果需要写定义式,应该写成因为在声明时已经复制,因此定义时不需要赋值。如果某些旧式编译器不支持在声明式赋初值,就在定义式中赋初值。在此时如果在类中需要定义一个数组的成员数量为该常量时,常量没有被赋值,可以使用the-enum-hack,即使用一个枚举类型的数值权当常量int使用。对于单纯常量,最好以 const 对象或 enum 替换#define。
2023-10-17 00:01:59
59
原创 CPP学习笔记(自用)
2023/9/20对于运算符重载后无法进行加法/乘法交换律的问题,该如何解决?1.定义非成员函数——但是这样必须把类中的数据设为public,不推荐2.定义非成员函数——返回对调后的函数3.使用友元——想在非成员函数中使用私有变量注意:友元函数不是成员函数,不能使用成员运算符来调用,但它与成员函数的访问权限相同在定义中不使用关键字friend,只在声明中使用。
2023-09-21 00:28:10
46
原创 java学习打卡(23.3.26)(自用)
主要内容:ArrayList,对象包装器,枚举类。内容:第五章 5.3-5.6。停更一下,最近要开始学前端。
2023-03-26 16:48:48
58
原创 java学习打卡(23.3.23)(自用)
主要内容:对象构造,包,类路径以及设计技巧,文档注释。有错误还请dalao指正Orz。内容:第四章4.6-4.10。
2023-03-23 23:20:20
86
原创 java学习打卡(23.3.22)(自用)
主要内容:使用和自定义类,静态域与静态方法,方法参数。笔记:(连着昨天第四章4.1-4.2部分)有错误还请dalao指正Orz。内容:第四章4.3-4.5。
2023-03-23 00:48:17
95
原创 java学习打卡(23.3.21)(自用)
主要内容:选择,循环,数组,BIGINTEGER 大数值。内容:第三章3.8-3.9 第四章4.1-4.2。书籍:《Java核心技术卷I 基础知识》
2023-03-22 01:18:13
85
原创 java学习打卡(23.3.20)(自用)
主要内容:基础语法,数据类型,string字符串操作,输入输出。书籍:《Java核心技术卷I 基础知识》有误的话还请dalao们指正Orz。内容:第三章3.1-3.7。
2023-03-21 01:32:45
83
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人