zoukankan      html  css  js  c++  java
  • C++——虚析构

    目的:

    //只执行了 父类的析构函数
    //向通过父类指针 把 所有的子类对象的析构函数 都执行一遍
    //向通过父类指针 释放所有的子类资源

    方法:在父类的析构函数前+virtual关键字

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    
    //虚析构函数
    class A
    {
    public:
        A()
        {
            p = new char[20];
            strcpy(p, "obja");
            printf("A()
    ");
        }
         virtual ~A()
        {
            delete [] p;
            printf("~A()
    ");
        }
    protected:
    private:
        char *p;
    };
    
    class B : public A
    {
    public:
        B()
        {
            p = new char[20];
            strcpy(p, "objb");
            printf("B()
    ");
        }
          ~B()
        {
            delete [] p;
            printf("~B()
    ");
        }
    protected:
    private:
        char *p;
    };
    
    
    class C : public B
    {
    public:
        C()
        {
            p = new char[20];
            strcpy(p, "objc");
            printf("C()
    ");
        }
        ~C()
        {
            delete [] p;
            printf("~C()
    ");
        }
    protected:
    private:
        char *p;
    };
    
    
    
    
    void howtodelete(A *base)
    {
        delete base;  //这句话不会表现成多态 这种属性
    }
    
    void main()
    {
        C *myC = new C; //new delete匹配
        //
        delete myC; //直接通过子类对象释放资源 不需要写virtual (即不使用虚析构)
    
        //howtodelete(myC); //使用父类对象释放资源,使用虚析构
        
        cout<<"hello..."<<endl;
        system("pause");
        return ;
    }
  • 相关阅读:
    C++ istringstream总结
    C++各数据类型的最值
    AcWing 机器人跳跃问题 二分
    蓝桥杯 矩形面积交
    蓝桥杯 完美的代价
    蓝桥杯 数的读法
    国内 镜像 下载
    redis的pipline使用
    MySQL额外操作
    sql强化演练( goods 表练习)
  • 原文地址:https://www.cnblogs.com/long5683/p/11402458.html
Copyright © 2011-2022 走看看