文章 2017-02-28 来自:开发者社区

读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数

1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类。这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口:   1 class WebBrowser { 2 3 public: 4 5 ... 6 7 void clearCache(); 8 9 void clearHistory(); 10 11 void rem...

文章 2017-02-27 来自:开发者社区

读书笔记 effective c++ Item 22 将数据成员声明成private

我们首先看一下为什么数据成员不应该是public的,然后我们将会看到应用在public数据成员上的论证同样适用于protected成员。最后够得出结论:数据成员应该是private的。 1. 为什么数据成员不能是public的? 为什么数据成员不能够是public的? 2.1 一致性 让我们从句法的一致性开始(Item 18)。如果数据成员不是Public的,那么客户访问对象的唯一方法就是通过成....

文章 2017-02-26 来自:开发者社区

读书笔记 effective c++ Item 21 当你必须返回一个对象的时候,不要尝试返回引用

1. 问题的提出:要求函数返回对象时,可以返回引用么? 一旦程序员理解了按值传递有可能存在效率问题之后(Item 20),许多人都成了十字军战士,决心清除所有隐藏的按值传递所引起的开销。对纯净的按引用传递(不需要额外的构造或者析构)的追求丝毫没有懈怠,但他们的始终如一会产生致命的错误:它们开始传递指向并不存在的对象的引用。这可不是好事情。 考虑表示有理数的一个类,它包含将两个有理数相乘的函数(I....

文章 2017-02-24 来自:开发者社区

读书笔记 effective c++ Item 19 像设计类型(type)一样设计类

1. 你需要重视类的设计 c++同其他面向对象编程语言一样,定义了一个新的类就相当于定义了一个新的类型(type),因此作为一个c++开发人员,大量时间会被花费在扩张你的类型系统上面。这意味着你不仅仅是一个类的设计者同时是一个类型设计者。重载函数和运算符,控制内存分配和释放,定义对象初始化和终结,这些都是你需要考虑的。因此你应该同语言设计者一样,它们将时间浪费在内建类型的设计上,你就应该对类的设....

文章 2017-02-23 来自:开发者社区

读书笔记 effective c++ Item 18 使接口容易被正确使用,不容易被误用

1. 什么样的接口才是好的接口 C++中充斥着接口:函数接口,类接口,模板接口。每个接口都是客户同你的代码进行交互的一种方法。假设你正在面对的是一些“讲道理”的人员,这些客户尝试把工作做好,他们希望能够正确使用你的接口。在这种情况下,如果接口被误用,你的接口应该至少负一部分的责任。理想情况下,如果使用一个接口没有做到客户希望做到的,代码应该不能通过编译;如果代码通过了编译,那么它就能做到客户想要....

文章 2017-02-22 来自:开发者社区

读书笔记 effective c++ Item 17 使用单独语句将new出来的对象放入智能指针

1. 可能会出现资源泄漏的一种用法 假设我们有一个获取进程优先权的函数,还有一个在动态分配的Widget对象上根据进程优先权进行一些操作的函数: 1 int priority(); 2 3 void processWidget(std::tr1::shared_ptr<Widget> pw, int priority); 注意这里使用了对象管理资源的用法(Item 13),pr...

文章 2017-02-21 来自:开发者社区

读书笔记 effective c++ Item 16 成对使用new和delete时要用相同的形式

1. 一个错误释放内存的例子 下面的场景会有什么错? 1 std::string *stringArray = new std::string[100]; 2 3 ... 4 5 delete stringArray   一切看上去都是有序的。new匹配了一个delete。但有一些地方确实是错了。程序的行为是未定义的。至少来说,stringArray指向的100个string对象中的99...

文章 2017-02-20 来自:开发者社区

读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问

1.为什么需要访问资源管理类中的原生资源  资源管理类是很奇妙的。它们是防止资源泄漏的堡垒,没有资源泄漏发生是设计良好的系统的一个基本特征。在一个完美的世界中,你需要依赖这样的类来同资源进行交互,绝不要直接访问原生(raw)资源而玷污你的双手。但是世界不是完美的,许多API会直接引用资源,所以除非你放弃使用这样的API(这是不实际的想法),你将会绕开资源管理类而时不时的处理原生资源。 2...

文章 2017-02-19 来自:开发者社区

读书笔记 effective c++ Item 14 对资源管理类的拷贝行为要谨慎

1. 自己实现一个资源管理类  Item 13中介绍了 “资源获取之时也是初始化之时(RAII)”的概念,这个概念被当作资源管理类的“脊柱“,也描述了auto_ptr和tr1::shared_ptr是如何用堆资源来表现这个概念的。然而并不是所有资源都是在堆上创建的,对于这种资源,像auto_ptr和tr1::shared_ptr这样的智能指针就不适合当作资源句柄(handle)来使用了。...

文章 2017-02-18 来自:开发者社区

读书笔记 effective c++ Item 13 用对象来管理资源

1.不要手动释放从函数返回的堆资源 假设你正在处理一个模拟Investment的程序库,不同的Investmetn类型从Investment基类继承而来, 1 class Investment { ... }; // root class of hierarchy of 2 3 // investment types 进一步假设这个程序库通过一个工厂函数(Item 7)来给我们提供特定In...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注