- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
C
Object-Oriented C++
Template C++
STL
C++
高效编程守则视情况而变化,取决于你使用 C++
的哪一部分。 const
对象或 enums
替换 #defines
。 macros
),最好改用 inline
函数替换 #defines
。 const
可以帮助编译器侦测出错误用法。 const
可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。 bitwise constness
,但你编写程序时应该使用“概念上的常量性”( conceptual constness
)。 const
和 non-const
成员函数有着实质等价的实现时,令 con-const
版本调用 const
版本可避免代码重复。 C++
不保证初始化他们。 member initialization list
),而不要在构造函数本体内使用赋值操作( assignment
)。初始值列列出的成员变量,其排列次序应该和它们在 class
中声明的次序相同。 local static
对象替换 non-local static
对象。 class
创建 default
构造函数、 copy
构造函数和 copy assignment
操作符,以及析构函数。( C++11
开始还有 move constructor
和 move assignment
)。 private
并且不予实现。使用像 uncopyable
这样的 base calss
也是一种做法。( C++11
以后可以使用 =delete
告诉编译器删除不需要的成员函数。) base calsses
应该声明一个 virtual
析构函数。如果 class
带有任何 virtual
函数,它就应该拥有一个 virtual
析构函数。 Classes
的设计目的如果不是作为 base classes
使用,或不是为了具备多态( polymorphically
),就不应该声明 virtual
析构函数。 class
应该提供一个普通函数(而非析构函数中)执行该操作。 virtual
函数,因为这类调用从不下降至 derived class
。 operator=
返回一个 reference to *this
。 operator=
有良好的行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及 copy-and-swap
。 Copying
函数应该确保赋值“对象内的所有成员变量”及“所有base class”成分。 copying
函数实现另一个 copying
函数。应该将共同机能放在第三个函数中,并有两个 copying
函数共同调用。 RAII
对象,它们在构造函数中获得资源并在析构函数中释放资源。 RAII Class
分别时 tr1::shared_ptr
和 auto_ptr
。前者通常是较好的选择,因为其 copy
行为比较直观。若选择 auto_ptr
,赋值动作会使它(被复制物)指向null。( C++11
中使用 std::shared_ptr
、 std::unique_ptr
和 std::weak_ptr
代替了两者。) RAII
对象必须一并复制它所管理的资源,所以资源的 copying
行为决定 RAII
对象的 copying
行为。 RAII class copying
行为是:抑制 copying
、实行引用计数法( reference counting
)。不过其行为也都可以被实现。 APIs
往往要求访问原始资源( raw resources
),所以每一个 RAII Class
应该提供一个“取得其所管理之资源”的办法。 new
表达式中使用 []
,必须在相应的 delete
表达式中也使用 []
。如如果在 new
表达式中不使用 []
,一定不要在相应的 delete
表达式中也使用 []
。 newed
对象存储于(置入)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。 Class
的设计就是 type
的设计。应该带着和“语言设计者当初设计语言内置类型”时一样的谨慎来研讨 class
的设计。 pass-by-reference-to-const
替换 pass-by-value
。前者通常比较高效,并可避免切割问题。( slicing problem
) STL
的迭代器和函数对象。对它们而言, pass-by-value
往往比较适当。 pointer
或 reference
指向一个 local stack
对象,或返回 reference
指向一个 heap-allocated
对象,或返回 pointer
或 reference
指向一个 local static
对象而有可能同事需要多个这样的对象。 private
。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供 class
作者以充分的实现弹性。 protected
并不比 public
更具封装性。 non-member non-friend
函数替换 member
函数。这样做可以增加封装性、包裹弹性( packing flexibility
)和机能扩充性。 this
指针所指向的那个隐喻参数)进行类型转换,那么这个函数必须是个 non-member
。 std::swap
对你的类型效率不高时,提供一个 swap
成员函数,并确定这个函数不抛出异常。 member swap
,也该提供一个 non-member swap
用来调用前者。对于 class
(而非 template
),也请特化 std;;swap
。 swap
时应针对 std::swap
使用 using
声明式,然后调用 swap
并且不带任何“命名空间资格修饰”。 std templates
全特化时好的,但千万不要尝试在 std
内加入某些对 std
而言全新的东西。 dynamic_casts
。如果有个设计需要转型动作,试着发展无需转型的替代设计。 C++-style
(新式)转型,而不是用旧式转型。前者很容易辨识出来,而且也比较有着分门别类的执掌。 handles
(包括 references
、指针、迭代器)指向内部对象。遵守这个条款可增加封装性,帮助 const
成员函数的行为像个 const
,并将发生 dangling handlers
的可能性降至最低。 Exception-salf functions
)即使发生异常也不会泄露资源或允许任何数据结构破坏。这样的函数区分为三种可能的保证:基本型、强烈型、不抛异常型。 copy-and-swap
实现出来,但“强烈保证”并非对所有函数都可以实现或具备实现意义。 inlining
限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级( binary upgradability
)更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。 function templates
出现在头文件,就将它们声明为 inline
。 Handle classes
和 Interface classes
。 full and declaration-only forms
)的形式存在。这种做法不论是否设计 templates
都适用。 public
继承”意味 Is-a
。适用于 base class
身上的每一件事情一定也适用于 derived classes
身上,因为每一个“derived class”对象也是一个 base class
对象。 derived class
内的名称会遮掩 base class
内的名称。在 public
继承下从来没有人希望如此。 using
声明式或转交函数( forwarding functions
)。 public
继承之下, derived classes
总是继承 base class
的接口。 pure virtual
)函数只具体指定接口继承。 impure virtual
)函数具体指定接口继承及缺省实现继承。 non-virtual
函数具体指定接口继承预计强制性实现继承。 virtual
函数的替代方案包括 NVI
手法及 Strategy
设计模式的多种形式。 NVI
手法自身时一个特殊形式的 Template Method
设计模式。 class
外部函数,带来的一个缺点时,非成员函数无法访问 class
的 non-public
成员。 tr1::function
( C++11
已经移到 std::function
)对象的行为就像一般函数指针。这样的对象可接纳“与给定之目标签名式( target signature
)兼容”的所有可调用物( callable entities
)。 non-virtual
函数。 virtual
函数——你唯一应该覆写的定西——确是动态绑定。 composition
)的意义和 public
继承完全不同。 application domain
),复合意味着 has-a
(有一个),在实现域( implementation domain
),复合意味着 is-implemented-in-terms-of
(根据某物实现出)。 Private
继承意味着 is-implemented-in-terms-of
(根据某物实现出)。它通常比复合( composition
)的级别低。但是当 derived class
需要访问 protected base class
的成员,或需要重新定义继承而来的 virtual
函数时,这么设计时合理的。 composition
)不同, private
继承可以造成 empty base
最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。 virtual
继承的需要。 virtual
继承会增加大小、速度、初始化(及赋值)复杂度等成本。如果 virtual base classes
不带任何数据,将时最具有实用价值的情况。 public
继承某个 interface class
”和“ private
继承某个协助实现的 class
”的两相组合。 classes
和 templates
都支持接口( interface
)接多态( polymorphism
)。 classes
而言接口时显式的( explicit
),以函数签名为中心,多态则是通过 virtual
函数发生于运行期。 templates
参数而言,接口是隐式的( implicit
),奠基于有效表达式。多态则时通过 template
具现化和函数重载 解析( function overloading resolution
)发生于编译期。 template
参数时,前缀关键字 class
和 typename
可互换。 typename
标识嵌套从属类型名称;但不得在 base class lists
(基类列)或 member initialization list
(成员初始值列)内以它最为 base class
修饰符。 derived class templates
内通过 this->
指涉 base class templates
内的成员名称,或由一个明白写出的“ base class
资格修饰符”完成。 Templates
生成多个 classes
和多个函数,所有任何 template
代码都不该与某个造成膨胀的 template
参数产生相依关系。 non-type template parameters
)而造成的代码膨胀往往可以消除,做法是以函数参数或 class
成员变量替换 template
参数。 member functions templates
(成员函数模板)生成“可接受所有兼容类型”的函数。 member templates
用于“泛化 copy
构造”或“泛化 assignment
操作”,你还是需要声明正常的 copy
构造函数和 copy assignment
操作符。 class template
,而它所提供的“与此 template
相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“ class template
内部的 friend
函数”。 Traits classes
使得“类型相关信息”在编译期可用。它们以 template
和" template
特化"完成实现。 overloading
)后, traits calsses
有可能在编译器对类型执行 if...else
测试。 Template metaprogramming
( TPM
,模板元编程)可将工作由运行期移到编译期,因而得以实现早期错误侦测和更高的执行效率。 TMP
可被用来生成“基于政策选择组合”( based on combinations of policy choices
)的客户定制代码,也可用来避免生成对某些特殊类型并不适合的代码。 set_new_handler
允许客户指定一个函数,在内存分配无法获得满足时被调用。 Nothrow new
是一个颇为局限的工具,因为它只适用于内存分配,后继的构造函数调用还是可能抛出异常。 new
和 delete
,包括改善效能、对 heap
运用错误进行调试、收集 heap
使用信息。 operator new
应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用 new-handler
。它也应该有能力处理 0 byte
申请。 class
专属版本则还应该处理“比正确大小更大的(错误)申请”。 operator delete
应该在收到 null
指针时不做任何事。 class
专属版本则还应该处理“比正确大小更大的(错误)申请”。 placement operator new
,请确定也写出对应的 placement operator delete
。如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄露。 placement new
和placement delete时,确定不要无意识(非故意)的掩盖了它们的正常版本。 C++
标准库的主要机能由 STL
、 iostreams
、 locales
组成。并包含 C99
标准程序库。 TR1
添加了智能指针(例如 tr1::shared_ptr
)、一般化函数指针( tr1::function
)、 hash-based
容器( unorderd_map,unordered_set
)、正则表达式( regular expressions
)以及另外10个组件的支持。 TR1
自身只是一份规范。为了获得 TR1
提供的好处,你需要一份实物。一个好的实物来源时 Boost
。 Boost
是一个社群,也是一个网站。致力于免费、源码开放、同僚复审的 C++
程序库开发。 Boost
在 C++
标准化过程中扮演深具影响力的角色。 Boost
提供许多 TR1
组件的实现品,以及其他许多程序库 关注我,带你21天“精通”C++!(狗头) 。
最后此篇关于《EffectiveC++改善程序与设计的55个具体做法》读书笔记的文章就讲到这里了,如果你想了解更多关于《EffectiveC++改善程序与设计的55个具体做法》读书笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
OkHttp的作用 OkHttp is an HTTP client。 如果是HTTP的方式想得到数据,就需要我们在页面上输入网址,如果网址没有问题,就有可能返回对应的String字符串,如果这个地址
Record 一个重要的字符串算法,这是第三次复习。 通过总结我认为之所以某个算法总是忘记,是因为大脑始终没有认可这种算法的逻辑(也就是脑回路)。 本篇主要讲解从KMP的应用场景,
SQL 注入基础 【若本文有问题请指正】 有回显 回显正常 基本步骤 1. 判断注入类型 数字型 or 字符型 数字型【示例】:
标签: #Prompt #LLM 创建时间:2023-04-28 17:05:45 链接: 课程(含JupyterNotebook) , 中文版 讲师: An
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单、灵活和有趣。界面则基于
红日靶机(一)笔记 概述 域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 po
八大绩效域详细解析 18.1 干系人绩效域 跟干系人所有相关的活动. 一、预期目标 ①与干系人建立高效的工作关系 ②干系人认同项目目标 ③支持项目的干系人提高
18.3 开发方法和生命周期绩效域 跟开发方法,项目交付节奏和生命周期相关的活动和职能. 一、预期目标: ①开发方法与项目可交付物相符合; ②将项目交付与干系人价值紧密
18.7 度量绩效域 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能度量是评估项目绩效,并采取适当的应对措施,以保持最佳项目绩效的过程。 一、 预期目标: ①对项目状况
pygraphviz 安装,windows系统: 正确的安装姿势: Prebuilt-Binaries/PyGraphviz at master · CristiFati/Prebuilt-Binar
今天给大家介绍IDEA开发工具如何配置devtools热加载工具。 1、devtools原理介绍 spring-boot-devtools是spring为开发者提供的热加载
一 什么是正则表达式 // 正则表达式(regular expression)是一个描述字符模式的对象; // JS定义RegExp类表示正则表达式; // String和RegExp都定义了使用
目前是2022-04-25 23:48:03,此篇博文分享到互联网上估计是1-2个月后的事了,此时的OpenCV3最新版是3.4.16 这里前提是gcc,g++,cmake都需要安装好。 没安装好的,
一、概述 1、Flink 是什么 Apache Flink is a framework and distributed processing engine for stateful comput
一、window 概述 Flink 通常处理流式、无限数据集的计算引擎,窗口是一种把无限流式数据集切割成有限的数据集进行计算。window窗口在Flink中极其重要。 二、window 类型 w
一、触发器(Trigger) 1.1、案例一 利用global window + trigger 计算单词出现三次统计一次(有点像CountWindow) 某台虚拟机或者mac 终端输入:nc -
一、时间语义 在Flink 中涉及到三个重要时间概念:EventTime、IngestionTime、ProcessingTime。 1.1、EventTime EventTime 表示日志事
一、概述 以wordcount为例,为什么每次输入数据,flink都能统计每个单词的总数呢?我们都没有显示保存每个单词的状态值,但是每来一条数据,都能计算单词的总数。事实上,flink在底层维护了每
一、概述 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 证应用流图状
一、standalone 部署模式 1、下载安装包 下载安装包地址 有两种安装包类型: 第一种是带 Hadoop依赖的(整合YARN) 第二种是不带 Hadoop依赖的(Standalone模式)
我是一名优秀的程序员,十分优秀!