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


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

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

    class Empty
    {
    public:
        //默认构造函数
        Empty(){};
        //拷贝构造函数
        Empty(const Empty& rhs){}
        //析构函数
        ~Empty(){}
    
        //拷贝赋值函数
        Empty& operator=(const Empty& rhs){};
    };
    
        //默认构造函数
        Empty e1;
        //拷贝构造函数
        Empty e2(e1);
        //拷贝赋值函数
        Empty e3=e1;

    2、  类中包含引用的时候无法进行一般的赋值操作,必须自己定义拷贝赋值操作符

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

    1、  声明为private可以阻止(单不绝对安全,member函数和friend函数还可以调用)

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

    2、  声明一个uncopyable的基类,再继承它

    class Empty:private Uncopyable
    {
    public:
        //默认构造函数
        Empty(){};
        //析构函数
        ~Empty(){}
    
    };
    
    class Uncopyable
    {
    public:
        //默认构造函数
        Uncopyable(){};
        //析构函数
        ~Uncopyable(){}
    
    private:
        //拷贝构造函数
        Uncopyable(const Uncopyable& ){}
        //拷贝赋值函数
        Uncopyable& operator=(const Uncopyable& ){};
    };

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

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

    2、  不是基类别就不需要

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

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

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

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

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

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

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

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

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

    1、

  • 相关阅读:
    Springboot + Atomikos + Druid + Mysql 实现JTA分布式事务
    JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
    java.net.UnknownHostException: lc001 未知的网络服务
    Maven 多模块引用版本的问题 java.lang.NoSuchMethodError
    Maven项目运行Junit测试用例 出现ClassNotFound
    CAS5.X 集群配置 初版
    调试CAS源码步骤
    openhtmltopdf 支持自定义字体、粗体
    Java HTML to PDF 支持SVG
    .Net 框架
  • 原文地址:https://www.cnblogs.com/ssss429170331/p/5587792.html
Copyright © 2020-2023  润新知