参考:http://www.cnblogs.com/ronny/p/3747186.html

条款18:让接口容易被正确使用,不易被误用

1,好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达成这些性质。

2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容。

3,“阻止误用”的办法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。

4,shared_ptr支持定制型删除器。这可以防范DLL问题,可以用来自动解除互斥锁。

条款19:设计class犹如设计type

如何设计高效的类呢?

1,新type的对象应该如何创建和销毁?

影响到的设计函数:构造函数、析构函数以有内存分配函数和释放函数(operator new,operator new[],operator delete,operator delete [])。

2,对象初始化和对象的赋值有什么样的差别?

取决于构造函数和赋值操作符的行为,注意区分初始化和赋值。

说了很多,总之就是要充分考虑。

条款20:宁以pass-by-reference-to-const替换pass-by-value

pass-by-value会造成较多的构造函数与析构函数的开销,并且在将派生类传递给基类接口的时候会发生类的切割问题。

上面的规则并不适用于内置类型,以及STL的迭代器和函数对象。对它们而言,pass-by-vaule往往比较适当。

条款21:必须返回对象时,别妄想返回其引用

如果定义一个局部变量,就是在stack空间创建对象;如果该对象由new创建,则是在heap上创建。

    绝对不要返回point或reference指向一个local stack对象(局部对象返回后会被销毁),或返回reference指向一个heap-allocated对象(无法销毁,内存泄露),或返
回point或reference指向一个local static对象而有可能同时需要多个这样的对象。
 

条款22:将成员变量声明为private

首先是代码的一致性(调用public成员时不用考虑是成员还是函数)。

其次封装性,都写成函数进行访问可以提供以后修改访问方法的可能性,而不影响使用方法。另外,public影响的是所有使用者,而protected影响的是所有继承者,都影响巨大,所以都不建议声明成员变量。

切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺条件获得保证,并提供class作者以充分的实现弹性。

protected并不比public更具封装性。

条款23:宁以non-member、non-friend替换member函数

宁可拿non-member non-friend函数替换member函数。这样做可以增加封装性、包裹弹性和机能扩充性。

条款24:若所有参数皆需要类型转换,请为些采用non-member函数

如果你需要为某个函数的所有参数(包括被this指针所指向的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member。

特别的,重载运算符操作函数时,如果是双目运算符,这个函数必须是non-member的。

条款25:考虑写出一个不抛异常的swap函数

如果你提供一个member swap,也该提供一个non-member swap来调用前者,对于classes(而非templates),也请特化std::swap

 

Effective C++笔记(四):设计与声明的更多相关文章

  1. Effective C++笔记:设计与声明

    条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容. ...

  2. EC++学习笔记(四) 设计与声明

    条款18:让接口容易被正确使用,不易被误用 必须考虑客户可能做出什么样的错误(防御式编程)std:shared_ptr会自动使用它的"每个指针专属的删除器",消除了"cr ...

  3. DirectX11笔记(四)--渲染管线

    原文:DirectX11笔记(四)--渲染管线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article/details/ ...

  4. 《Effective C++》第4章 设计与声明(1)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  5. 《Effective C++》第4章 设计与声明(2)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  6. 《Effective C++》阅读总结(四): 设计、声明与实现

    第四章: 设计与声明 18. 让接口更容易被正确使用,不易被误用 将你的class的public接口设计的符合class所扮演的角色,必要时不仅对传参类型限制,还对传参的值域进一步限制. 19. 设计 ...

  7. Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记

    Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函 ...

  8. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  9. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

随机推荐

  1. Linux内核分析第五周——扒开系统调用的“三层皮”(下)

    Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...

  2. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  3. 解题:AHOI 2013 作业

    题面 emmm......我把莫队扔到了杂题里,因为感觉局限挺大的=.= 这题是莫队维护信息+分块查询答案,都是两者的基本操作,复杂度$O(m$ $sqrt(n)+n$ $sqrt(m))$ 所以为啥 ...

  4. 【51nod1965】奇怪的式子

    Portal --> 51nod1965 Solution 怎么说呢..这题..做的有点痛苦.. 首先看这个式子长得..比较奇怪,指数里面那个加号有点烦人,而且这个函数不是一个积性函数也有点烦人 ...

  5. Notes of fwt

    昨天考试由于不会fwt而爆炸,所以今天搞了一下fwt……话说这玩意的普及程度已经很高了.fwt,快速沃尔什变换,可以用于位运算卷积的优化,是一种线性变换,所以就会有许多好的性质(eg:可以直接模,可以 ...

  6. git使用经验(一)

    在使用Git Push代码到数据仓库时,提示如下错误: [remote rejected] master -> master (branch is currently checked out) ...

  7. 【极值问题】【CF33C】 Wonderful Randomized Sum

    传送门 Description 给你一个数列\(A\),你可以选择任意一个前缀和任意一个后缀,前缀后缀可重合.给他们乘\(-1\).求最大能获得的序列和. Input 第一行是一个数\(n\)代表数列 ...

  8. poj2549 Sumsets

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11886   Accepted: 3273 Descript ...

  9. Socket初识2

    一.Socket一些概念 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 1.1 参数1:Socket Families(地址簇) / ...

  10. P3620 [APIO/CTSC 2007]数据备份

    P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...