Default Constructor && Copy Constructor

本文探讨了位拷贝语义(Bitwise Copy Semantics)带来的问题,特别是重复释放内存导致的程序错误。文章详细分析了在C++中实现深拷贝的必要性,包括如何避免位拷贝语义的陷阱,以及何时不会发生位拷贝。同时介绍了深拷贝构造函数的作用和使用场景。
摘要由CSDN通过智能技术生成

Bite Copy Semantics (位逐次拷贝)

1.Default Constructor

    将class 对象中的值原原本本的copy到另一个对象中。

    产生的问题:

    class A{

    public:

        /*

        //在bitwise copy semantics时注释,表示没有构造函数

        A()

        {

            m_pData = new int;

        }

        //这里的初始化顺序是先初始化m_data,再初始化m_index。按照变量声明的顺序。

        A(int data,int index):m_index(index),m_data(data)

        {

    

         }

        */

        ~A()

        {

            delete m_pData;

        }

    private:

        int m_data;

        int m_index;

        int * m_pData;

    };

    这里当:

    int main()

    {

`       A a1;

        A a2 = a1;


        return 0;

    }

    会报错,原因是a2 - a1;进行bitwise copy semantics;在执行析构函数的时候m_pData被delete两次。

    什么时候不进行bitwise copy semantics:

    1)当A类有成员变量是B类对象,并且B类含有默认构造函数

    2)类的基类有默认构造函数时

    3)类中存在虚函数

    4)虚基类 virtual public Base(虚基类作用是去掉多继承中重名的变量和重名的方法名称)

    5)类没有copy constructor

    

2.Copy Constructor

    什么时候不进行bitwise copy semantics:

    1)class中含有的成员对象B b; 类B中声明有Copy constructor

    2)class继承的基类有Copy constructor

    3)class有virtual function时

    4)class继承的基类有virtual function

    如果class出现了bitwise copy semantics时,就不会为我们产生Default/Copy Constructor


    所以,对象传递一般用 指针、引用或重写copy constructor。而不是浅拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值