第一篇C++随笔~~~

复制构造函数,赋值构造函数,析构函数... ...(这些操作统称为“复制控制”)。
     如果我们没有定义复制构造函数,编译器汇合成一个“合成复制构造函数”,执行逐个成员(将现有对象的每个非static成员,依次复制到正创建的对象)初始化,将新对象初始化为原对象的副本。
    一般不能复制数组,但如果一个类具有数组成员,则将复制数组的每一个元素。
    定义自己的复制构造函数:ClassName(const ClassName&);
    在(1)类中的数据成员有指针或有成员表示在构造函数中分配的其他资源;
        (2)在创建新对象时,必须多一些特定工作。
    上述两中情况必须定义复制构造函数!!!
    有些类需要完全禁止复制(如iostream类),为了防止复制,类必须显示声明其复制构造函数为private
    一般来说,最好显示或隐式定义默认构造函数和复制构造函数。只有不存在其他构造函数时,才合成默认构造函数。如果定义了复制构造函数,也必须定义默认构造函数。
    赋值构造函数,通过重载操作符(=)实现。ClassName& operator=(const ClassName&);返回*this~可以使用一个if判断当前右操作符是否为this本身:if(&reference == this){}
    析构函数~~~撤销对象时,会调用析构函数;当对象的引用(指针)超出作用域时,不会运行析构函数;
                           只有删除指向动态分配对象的指针或实际对象(非引用)超出作用域时,才会运行析构函数;
    同时,撤销一个容器(标准容器或数组)时,也会运行容器中的类类型元素的析构函数:

    ClassName*    p = new ClassName[10];
     vector<ClassName*>    pvec(p, p + 10);

                                                                             delete[] p;
    此段语句将调用10次ClassName的析构函数。
    这里要记住一个很重要的法则:“三法则”——如果类需要析构函数,则它也需要赋值操作符和复制构造函数!!!
    最后,析构函数与复制构造函数和赋值操作符不同,无论是否定义了自己的析构函数,都会创建和运行“合成构造函数”。如果类定义了析构函数,则在自己定义的析构函数结束之后运行合成析构函数~~~

     第一篇关于学习c++的心得(学习c++primer4),如果有错误,还请大家指正,刚刚学习不久,请多多指教~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值