zoukankan      html  css  js  c++  java
  • C++构造函数与析构函数

    普通构造函数

    当你在自定义类中没有编写构造函数时,编译器会帮你自动生成一个构造函数,并且这个构造函数不会做任何事情,可以认为是一个空函数。构造函数不会有返回值,但是可以有不同类型个数的传入参数,其实就是重载构造函数。

    浅拷贝构造函数

    当你没有定义浅拷贝构造函数时,编译器也会帮你生成一个浅拷贝构造函数。什么是浅拷贝?当你类成员不涉及系统资源,那么就可以使用浅拷贝。浅

    class Child
    {
    public:
            int a;
            int b;
    
            Child(const Child& c)
            {
                    a  = c.a;
                    b  = c.b;
            }
    };

    代码中,这个类没有使用到系统资源,因此可以直接的赋值。

    ps:拷贝构造函数和 重载operator =函数的调用时机是不同的,拷贝构造函数只在初始化时候调用,即 Classname T = c;而赋值运算符是在赋值的时候才调用。 

    深拷贝构造函数

    当使用到了系统资源的时候应该要使用深拷贝构造函数。什么是深拷贝?如果类成员有一个指针,这时采用浅拷贝,那么就把指针地址拷贝到另一个对象的成员中,这时候两个对象拥有同一个指针地址,进行释放时,会对这一个地址进行两次释放,程序一定会异常。所以拷贝时候不能像浅拷贝一样直接赋值,而是要申请一块新的内存,内存里面存放的是被拷贝对象类成员的指针指向的值。深拷贝是需要自己手动写。

    析构函数

    析构函数一般做的事情是释放掉使用了系统资源的地方。当对象的生命周期结束时,就会调用析构函数。编译器不会默认提供析构函数

    对象的初始化顺序

    一般来说,最先初始化的是父类,然后是对象的成员,再到子类的构造函数。当对象生命周期结束时,则是子类的析构函数先执行,再到父类的析构函数。

  • 相关阅读:
    "SoftwareHex-RaysIDA" exists, but no "Python3TargetDLL" value found No Python installations were found
    visual studio修改安装位置
    ror13hash
    IMAGE_DIRECTORY_ENTRY_SECURITY【证书属性表
    华为云自动学习物体检测(滑动窗口)
    Java BigInteger中的oddModPow
    vue 动态路由传参三种方式
    git根据项目地址使用不同代理服务器
    关于MySQL8的WITH查询学习
    有1、2、3、4个数字,能组成多少个互不相同 且无重复数字的三位数?都是多少?
  • 原文地址:https://www.cnblogs.com/r1chie/p/11243940.html
Copyright © 2011-2022 走看看