Effective C++
文章平均质量分 63
个人Effective C++一书的学习笔记
baobaolong_ci
这个作者很懒,什么都没留下…
展开
-
「Effective C++」条款13: 以对象管理资源
是一种独占式智能指针,只能有一个指针指向它所拥有的对象,当指针被销毁时,它所拥有的对象也会被销毁。可以转移拥有权,即将一个对象的拥有权转移给另一个对象或者一个原始指针。是一种共享式智能指针,多个指针可以指向同一个对象,当最后一个对象被销毁时,才会销毁所拥有的对象。内部维护了一个引用计数器,用于记录有多少个对象指向同一个对象。原创 2023-06-05 15:01:14 · 105 阅读 · 0 评论 -
「Effective C++」条款12: 复制对象时勿忘其每一个成分
拷贝构造函数 + 赋值运算符重载函数 = copying函数。赋值运算符重载函数=copy assignment操作符。拷贝构造函数=复制构造函数=copy构造函数。原创 2023-06-02 16:41:10 · 74 阅读 · 0 评论 -
「Effective C++」条款04: 确定对象被使用前已先被初始化
成员变量的声明顺序可以不和初始化列表写的顺序相同,但是实际上初始化顺序还是按照声明顺序进行的,不过请按照声明顺序书写初始化列表。第一种方式(在构造函数函数体内进行初始化),这种方式,首先。内存的是脏数据,并不清楚具体的值,所以操作未知的值会引发意想不到的状况,为此,我们使用对象前需要进行初始化。 虽然对于内置类型,两种方式的效率几乎相同,但是为了统一,建议还是都使用初始化列表的方式进行初始化。 ·首先看不推荐的初始化方式(记住C++规定对象的成员变量初始化动作发生在进入构造函数本体之前)原创 2023-05-23 16:22:17 · 56 阅读 · 1 评论 -
「Effective C++」条款05: 了解c++默默编写并调用了哪些函数
析构函数不是用来销毁对象的,而是在编译器销毁对象的时候自动调用析构函数来清理资源的;作为基类的时候析构函数加virtual关键字,子类才能够销毁对象时释放资源;取地址重载和const取地址重载:一般不单独考虑。不涉及资源的释放可以不写;析构函数不可以重载;原创 2023-05-24 10:43:25 · 89 阅读 · 0 评论 -
「Effective C++」条款07: 为多态基类声明virtual析构函数
输出结果图:-----证明当父类的析构函数没有virtual关键字的时候子类的析构函数没有被正确调用。2.既然有内存的申请,就必须有内存的释放,释放使用关键字。观察以上代码,应该思考为什么基类的析构函数加上了关键字。输出结果图:可以看到两个子类的析构函数被调用。在堆上分配内存,堆上的内存需要程序员申请。3.关于多态基类为什么需要使用。关键字,正是和内存释放有关。原创 2023-05-29 17:44:06 · 80 阅读 · 1 评论 -
「Effective C++」条款09: 绝不在构造和析构过程中调用virtual函数
正如第一点所分析的,构造函数的调用顺序是先基类的构造函数,再调用子类的构造函数(易错点:只有子类的构造函数调用的时候,子类的对象才会存在),所以当调用基类的构造函数的时候,子类的对象并不存在,既然子类的对象不存在,那么也就无法调用子类的虚函数。 同理,按照析构的顺序,会先调用子类的析构函数,此时子类的资源都没了,所以没法调用子类的虚函数,接着调用父类的析构函数,此时父类的析构函数所调用的就是父类自己的虚函数。声明了一个子类的对象,所以按道理应该调用的是子类重写后的虚函数,即输出。原创 2023-05-29 18:35:21 · 73 阅读 · 1 评论 -
「Effective C++」条款10: 令operator=返回一个reference to *this
参考文章:(https://blog.csdn.net/u014038273/article/details/75426041)书中说明:“为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参”。这代码是正确的,但是如果你有一个类,需要在类对象之间连锁赋值,就必须遵守这句书中说明。可见采用值作为返回值和引用作为返回值输出结果并没有什么区别,都能正确的在对象之间进行赋值。使用引用方式进行赋值速度更快,使用值赋值的方式需要创建临时对象,速度慢一点。输出结果:a,b,c的值相同。原创 2023-05-30 09:46:34 · 102 阅读 · 1 评论 -
「Effective C++」条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
优点:操作简单,能够应付大多数场景缺点:友元依旧可以操作定义为private的成员函数,或者使用公共成员函数也可以调用声明为private的成员函数public:private:Student(const Singleton& obj){} //声明为private,并定义为空来防止拒绝使用这两个函数。原创 2023-05-25 14:21:24 · 98 阅读 · 1 评论 -
「Effective C++」条款11:在operator= 中处理“自我赋值”
注意,在我们日常的编码过程中,一般不需要按照本文的方式来做什么事,因为本节属于编译器自动生成的默认函数的范围,编译器会帮我们做好安全方面的问题,但是由于我们知道如果你自己显式的写了相关的函数,编译器就不再自动的生成,所以如果你写的函数版本有错误,可能会导致本节所提到的问题,解决方式请参照本文内容。指针指向的地址,来释放内存,否则会内存泄漏,正是因为这个这个delete,导致了问题。可见并不是我们所期望的那样,因为这个自我赋值,把原本的值也删除了。是一个指针,要把这个指针赋予新的地址,就必须先释放这个。原创 2023-06-01 10:58:41 · 93 阅读 · 0 评论 -
「Effective C++」条款02:尽量以const,enum,inline替换#define
Effective C++原创 2023-05-22 11:56:45 · 92 阅读 · 2 评论