Effective C++ 笔记2(构造,析构,赋值)

条款5:了解C++默默编写而且调用了哪些函数安全

一、  构造函数,析构函数,拷贝赋值函数,拷贝构造函数。函数

class Empty
{
public:
    //默认构造函数
    Empty(){};
    //拷贝构造函数
    Empty(const Empty& rhs){}
    //析构函数
    ~Empty(){}

    //拷贝赋值函数
    Empty& operator=(const Empty& rhs){};
};

    //默认构造函数
    Empty e1;
    //拷贝构造函数
    Empty e2(e1);
    //拷贝赋值函数
    Empty e3=e1;

 

二、  类中包含引用的时候没法进行通常的赋值操做,必须本身定义拷贝赋值操做符this

 

条款6:若不想使用编译器自动生成的函数就应该明确拒绝spa

一、  声明为private能够阻止(单不绝对安全,member函数和friend函数还能够调用)code

class Empty
{
public:
    //默认构造函数
    Empty(){};
    //析构函数
    ~Empty(){}

private:
    //拷贝构造函数
    Empty(const Empty& rhs){}
    //拷贝赋值函数
    Empty& operator=(const Empty& rhs){};
};

 

二、  声明一个uncopyable的基类,再继承它对象

 

class Empty:private Uncopyable
{
public:
    //默认构造函数
    Empty(){};
    //析构函数
    ~Empty(){}

};

class Uncopyable
{
public:
    //默认构造函数
    Uncopyable(){};
    //析构函数
    ~Uncopyable(){}

private:
    //拷贝构造函数
    Uncopyable(const Uncopyable& ){}
    //拷贝赋值函数
    Uncopyable& operator=(const Uncopyable& ){};
};

 

条款7:为多态基类声明virtual析构函数blog

一、  基类的析构函数要加virtual,防止delete的时候局部销毁继承

二、  不是基类别就不须要编译器

 

条款8:别让异常跳出析构函数编译

一、  析构函数在处理的时候必定要加上try catch

二、  若是须要对异常进行反应,则把处理写成一个普通的方法处理,加上标志位,运行正常后再在析构函数中处理

 

条款9:毫不在构造函数和析构函数中调用virual函数

 

条款10:令operator= 返回一个reference to *this

一、  class& operator=(){return *this}

 

 

条款11:在operator=中处理自我辅值

一、肯定在一个函数中包含2个对象的时候,这两个对象是同一个对象的状况下是否正确

 

条款12复制对象时勿忘记其每个成分

一、

相关文章
相关标签/搜索