zoukankan      html  css  js  c++  java
  • Effective C++学习笔记 chapter 2

    1.如果不想对象有默认的拷贝构造函数和拷贝赋值函数,可以在对象中声明这两个函数而不去实现他们

    更好的做法:

    class Uncopyable

    {

    protected:

      Uncopyable(){}

      ~Uncopyable(){}

    private:

      Uncopyable(const Uncopyable&);

      Uncopyable& operator=(const Uncopyable);

    };

    class HomeForSale : private Uncopyable

    {

    };

    上述是以private方式进行继承的

    2.为多态基类声明virtual析构函数

    1)带有多态性质的基类应该声明一个virtual析构函数;如果类带有任何virtual函数,它就应该拥有一个virtual析构函数

    2)class的设计目的如果不是为了作为基类使用,或者不是为了具备多态性,就不该声明virtual析构函数(会增加类的大小)

    3.别让异常逃离析构函数

    1)析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下他们或结束程序

    2)如果客户需要对某个操作函数运行期间抛出的异常做出反应,难么该类应该提供一个普通函数(而非在析构函数中)执行该操作

    4.绝对不要在构造和析构过程中调用virtual函数

    解释:在base构造期间,virtual函数不是virtual函数

    5.令operator=返回一个reference to *this

    6.在operator=中处理自我赋值

    1)

    Widget& Widget::operator=(const Widget &rhs)

    {

      Bitmap *pOrig = pb;

      pb = new Bitmap(*rhs.pb);

      delete pOrig;

      return *this;

    }

    2) copy and swap技术

    Widget& Widget::operator=(const Widget &rhs)

    {

      Widget temp(rhs);

      swap(temp);  //将this数据和上述复件的数据交换

      return *this;

    }

    7. 赋值对象时勿忘其每一个成分

    当你编写一个copying函数时,请确保1)复制所有的local成员变量2)调用所有base classes内的适当的copying函数

  • 相关阅读:
    后盾网-CI框架实例教程-马振宇
    后盾网-CI框架实例教程-马振宇
    CI框架-学习笔记
    慕课网--PHP进阶篇--学习笔记(2)
    慕课网--PHP进阶篇--学习笔记(1)(数组、类与面向对象)
    慕课网--PHP入门篇--学习笔记
    移动端知识转载收藏
    移动端web app自适应布局探索与总结
    IE6/IE7下:inline-block解决方案
    微信JS SDK Demo 官方案例
  • 原文地址:https://www.cnblogs.com/shirley-ict/p/5485355.html
Copyright © 2011-2022 走看看