
C++条款
MisakiJh
与其临渊羡鱼,不如退而结网
展开
-
C++条款:复制对象时应事无巨细 3/55
复制对象时应事无巨细Copy allparts of an object如果你声明自己的copy函数,意思就是告诉编译器你并不喜欢缺省实现中的某些行为。编译器仿佛被冒犯似的,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你。考虑一个class用来表现顾客,其中手工写出copy函数,使得外界对他们的调用会被记录下来(logged)void logCall(const...原创 2019-03-25 18:47:39 · 238 阅读 · 0 评论 -
C++条款 设计class犹如设计type 10/55
设计class犹如设计typeTreat class design as type designC++就像在其他OOP(面向对象编程)一样,当你定义一个新class,也就定义了一个新type。身为C++程序员,你的许多时间主要用来扩张你的类型系统(type syetem)。这意味着你并不只是class设计者,还是type设计者。重载(overloading)函数和操作符、控制内存的分配和归...原创 2019-04-02 19:02:44 · 200 阅读 · 0 评论 -
C++条款 在资源管理类中提供对原始资源的访问 6/55
在资源管理类中提供对原始资源的访问Provide access to raw resources in resource-managing classes资源管理类很值得我们去使用,是我们对抗资源泄漏的堡垒。排除此等泄漏是良好设计系统的根本性质。但尽管如此,仍有很多APIs直接指涉资源,所以除非你永不录用这样的APIs,否则只得绕过资源管理对象直接访问原始资源。举个例子,之前的条款...原创 2019-03-28 21:15:31 · 301 阅读 · 0 评论 -
C++条款 让接口容易被正确使用,不易被误用 9/55
让接口容易被正确使用,不易被误用Make interfaces easy to use correctly and hard to use incorrectly若客户企图把事情做好,他们想要正确使用你的接口,这种情况下如果他们对任何其中一个接口的用法不正确,你至少也得负一部分责任。欲开发一个“容易被正确使用,不易被误用”的接口,首先必须考虑客户可能做出什么样的错误。假设你为一个用来表现日...原创 2019-04-01 21:33:50 · 215 阅读 · 0 评论 -
C++条款 将成员变量声明为private 13/55
将成员变量声明为privateDeclare date members private首先带你看看为什么成员变量不该是public,然后让你看看所有反对public成员变量的论点同样适用于protected成员变量。最后导出一个结论:成员变量应该是private。获得这个结论,本条款就大功告成了。让我们从语法一致性开始。如果成员变量不是public,客户唯一能够访问对象的办法就是通过成...原创 2019-04-06 16:11:20 · 274 阅读 · 0 评论 -
C++条款 必须返回对象时,别妄想返回其reference 12/55
必须返回对象时,别妄想返回其referenceDon't try to return a reference when you musst return an object一旦程序员领悟了pass-by-value的效率牵连层面,往往变成十字军战士,一心一意根除pass-by-value带来的种种邪恶。在坚定追求pass-by-reference的纯度中,他们一定会犯下一个致命错误:开始传...原创 2019-04-06 14:41:06 · 254 阅读 · 0 评论 -
C++条款 在资源管理类中小心copying行为
在资源管理类中小心copying行为Think carefully about copying behavior in resource-managing classes上个条款中,我们导入这样的观念:“资源取得时机便是初始化时机”(RAII),也描述了auto_ptr和tr1::shared_ptr如何将这个观念表现在heap-based资源上。然而并非所有资源都是heap-based,...原创 2019-03-27 20:54:47 · 309 阅读 · 0 评论 -
C++条款 以独立的语句将newed对象置入智能指针 8/55
以独立的语句将newed对象置入智能指针Store newed objects in smartpointers in standalone statements假设我们有个函数用来揭示处理程序的优先权,另一个函数用来在某动态分配所得的Widget上进行某些带有优先权的处理:int priority();void processWidget(std::tr1::shared_...原创 2019-03-31 13:03:25 · 151 阅读 · 0 评论 -
C++条款 2/54
条款02 尽量以const,enum,inline替换#define“宁可以编译器替换预处理器”比较好预处理器:最常见为C预处理器,采用"#"为行首的指示,根据用户定义的规则,进行简单的词法单元替换。典型的词法预处理器产生宏替换,包含其他文件的文本,并且条件性地编译或者包含文件。当你做出#define ASPECT_RATIO 1.653意味着所有的ASPECT_RATIO 都...原创 2019-03-24 09:45:30 · 310 阅读 · 0 评论 -
C++条款:以对象管理资源 4/55
以对象管理资源Use objects to manage resources假设我们使用一个用来塑模投资行为(股票、债券等等)的程序库,其中各式各样的投资类型继承自一个root class Investment:class Investment{...}这个程序库通过一个工厂函数(factory function)供应我们某特定的Investment对象:Investmen...原创 2019-03-26 16:25:13 · 153 阅读 · 0 评论 -
C++条款 宁以pass-by-reference-to-const替换pass-by-value 11/55
宁以pass-by-reference-to-const替换pass-by-valuePrefer pass-by-referenct-to-const to pass-by-value缺省情况下C++以by value方式传递对象至(或来自)函数。除非你另外指定,否则函数参数都是以实际实参文件的复件为初值,而调用端所获得的亦是函数返回值的一个复件。这些复件由对象的copy构造函数产出,这...原创 2019-04-03 21:01:41 · 225 阅读 · 0 评论 -
C++条款:成对使用new和delete时要采取相同形式 7/55
成对使用new和delete时要采取相同形式Use the same form in corresponding uses of new and delete先思考:以下动作有什么错?std::string* stringArray = new std::string[100];...delete stringArray;看起来井然有序,使用了new,也搭配了delete。但...原创 2019-03-29 20:13:48 · 176 阅读 · 0 评论 -
C++条款 宁以non-member、non-friend替换menber函数 14/55
宁以non-member、non-friend替换menber函数Prefer non-member non-friend functions to member functions想想有个class用来表示网页浏览器。在这个class可能提供的众多函数中,有一些用来清除下载元素高速缓冲区、清除访问过的URLs的历史记录、以及移除系统中的所有cookies:class WebBrow...原创 2019-04-09 21:00:46 · 446 阅读 · 0 评论