• C++ virtual descructor


    【代码1】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    /*
        version: 1.0
        author: hellogiser
        blog: http://www.cnblogs.com/hellogiser
        date: 2014/9/22
    */


    #include "stdafx.h"
    #include "iostream"
    #include <assert.h>
    using namespace std;

    void print(const char *str)
    {
        cout << str << endl;
    }

    class A
    {
    public:
        A()
        {
            p();
        }
        
    virtual void p()
        {
            print(
    "A");
        }
        
    virtual ~A()
        {
            p();
        }
    };

    class B: public A
    {
    public:
        B()
        {
            p();
        }
        
    void p()
        {
            print(
    "B");
        }
        ~B()
        {
            p();
        }
    };

    int main(intchar **)
    {
        A *a = 
    new B();
        
    delete a;
    }

    /*
    A
    B
    B
    A
    */

    如果A类的析构函数去掉virtual呢?

    【代码2】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    /*
        version: 1.0
        author: hellogiser
        blog: http://www.cnblogs.com/hellogiser
        date: 2014/9/22
    */


    #include "stdafx.h"
    #include "iostream"
    #include <assert.h>
    using namespace std;

    void print(const char *str)
    {
        cout << str << endl;
    }

    class A
    {
    public:
        A()
        {
            p();
        }
        
    virtual void p()
        {
            print(
    "A");
        }
        ~A()
        {
            p();   
    // remove virtual
        }
    };

    class B: public A
    {
    public:
        B()
        {
            p();
        }
        
    void p()
        {
            print(
    "B");
        }
        ~B()
        {
            p();
        }
    };

    int main(intchar **)
    {
        A *a = 
    new B();
        
    delete a;
    }

    /*
    A
    B
    A
    */

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    CodeForces 404C Restore Graph (构造)
    UVa 1204 Fun Game (状压DP)
    HDU 5038 Grade (水题,坑题)
    mybatis整合Spring编码
    关于Spring MVC写的不错的几篇博客
    SpringMVC配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />
    常见文件下载后缀
    Spring MVC
    Spring
    反射
  • 原文地址:https://www.cnblogs.com/hellogiser/p/cplusplus-virtual-destructor.html
Copyright © 2020-2023  润新知