zoukankan      html  css  js  c++  java
  • Effective C++笔记(四):设计与声明

        参考: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

     

         

  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/573177885qq/p/5404955.html
Copyright © 2011-2022 走看看