Loading

摘要: C++11新增了R+字符串表示原始字面量,其中的转移字符不会被解释。 R"delimiter(raw_characters)delimiter" 原始字符串raw_characters必须用小括号包住,其内部的任何转义字符都不会被解释。 原始字符串前后可以添加附加delimiter,且不会出现在编辑 阅读全文
posted @ 2021-10-25 21:54 sandersunkown 阅读(144) 评论(0) 推荐(0)
摘要: 过度热情计算法 相比于懒惰计算法,在要求出现之前就完成对应的需求工作,称为__过度热情计算法__。过度热情的计算思路并不与懒惰计算法矛盾,其高效的核心在于优化高频的计算,更高效的处理计算结果,从而降低每次计算时的开销。 缓存 最简单的方法就是__缓存__,即__记录未来可能用到的计算结果__。例如, 阅读全文
posted @ 2021-10-15 22:06 sandersunkown 阅读(60) 评论(0) 推荐(0)
摘要: 懒惰计算法 懒惰计算法在于将计算延迟到需要计算结果时再去计算,如果永远不需要用到结果,就永久都不去计算。这套方法常见于各种应用领域: 引用计数 字符串的拷贝通常会有较大的开销,如果在复制构造函数中让新旧对象共享同一个字符串数据,就能省去数据的复制步骤。共享数据需要添加引用计数,以记录共享者并确定合适 阅读全文
posted @ 2021-09-30 21:49 sandersunkown 阅读(68) 评论(0) 推荐(0)
摘要: 支持异常处理本身伴随资源的开销,即使不使用异常特性,这部分开销仍是不可避免的,但了解其有助于将开销最小化。异常处理的开销包括: 建立数据结构跟踪对象是否被完全构造、在抛出异常时应释放哪个对象,并不断更新这些数据。 这部分的开销比较小,但是不可避免。因为异常是C++的一部分,除非编译器能够自由开关是否 阅读全文
posted @ 2021-09-30 21:48 sandersunkown 阅读(73) 评论(0) 推荐(0)
摘要: 在两种情况下会调用析构函数:正常情况下删除对象,即显式调用或者对象离开声明周期;异常传递的栈开解,由异常处理系统删除对象。 可见,调用析构函数时异常可能处于激活状态,但不能再析构函数内部做判断,因此__必须在写析构函数时保守的假设异常被激活。如果一个异常被激活的同时,析构函数也抛出异常,并导致程序控 阅读全文
posted @ 2021-08-22 23:11 sandersunkown 阅读(51) 评论(0) 推荐(0)
摘要: 有以下函数: void function() { Awesome * obj = new Awesome; obj->process(); delete obj; } 当process发生异常时,function没有捕获异常;异常将会被传递到function的调用者,而process之后的代码则被跳 阅读全文
posted @ 2021-08-19 21:19 sandersunkown 阅读(64) 评论(0) 推荐(0)
摘要: 有以下构造函数和析构函数: BookEntry::BookEntry() : pImage(nullptr) , pClip(nullptr) { pImage = new Image(); pClip = new Clip(); } ~BookEntry() { delete pImage; de 阅读全文
posted @ 2021-08-19 21:19 sandersunkown 阅读(59) 评论(0) 推荐(0)
摘要: C++使用new操作符(new operator / new)来完成动态内存的分配,其的实现分为两步:通过operator new分配足够的堆内存,调用构造函数初始化内存对象。类似的,delete首先调用析构函数,然后通过operator delete释放内存。 new、delete操作符和size 阅读全文
posted @ 2021-08-13 10:02 sandersunkown 阅读(70) 评论(0) 推荐(0)
摘要: C++允许许多运算符的重载,但能重载不是重载的理由。运算符重载目的是使程序更加可读、书写和理解,而不能违背原有的特性去迷惑他人。如果没有一个好的理解,不要去重载。 &&和||运算符 C/C++在布尔表达式运算使用短路运算法:一旦确定了表达式的真假,不会运算剩下的表达式。如expression1 && 阅读全文
posted @ 2021-08-10 21:59 sandersunkown 阅读(62) 评论(0) 推荐(0)
摘要: 自增、自减的前缀即先增/减后取回,后缀则是取回然后增/减。 运算符重载差异 为了区分前缀和后缀,后缀形式的重载函数有int型参数,在调用处编译器会传一个0作为函数参数。这个参数没有实际用途,为了避免编译器对未使用参数的警告,应避免在声明和实现给这个参数命名。 class UPInt{ public: 阅读全文
posted @ 2021-08-10 21:53 sandersunkown 阅读(477) 评论(1) 推荐(1)