zoukankan      html  css  js  c++  java
  • C++构造函数和析构函数执行顺序

    四种情况:
    1. 创建一个类指针时,调用其构造函数;删除当前指针时,自动调用其析构函数。
    2. 创建子类对象指针时,首先调用其父类的构造函数,然后调用子类的构造函数;删除当前指针时先调用子类的析构函数,然后调用父类的析构函数。
    3. 一个父类指针指向子类地址时,创建指针时先调用父类的构造函数,然后调用子类的构造函数;删除当前指针时,只调用父类的析构函数。
    4. 在第三种情况中,为了在删除指针时,也调用子类的析构函数,则需要将父类的析构函数声明为抽象的。
     

    给出具体的代码实践结果:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //四种情况:
     5 //1. 创建一个类指针时,调用其构造函数;删除当前指针时,自动调用其析构函数
     6 //2. 创建子类对象指针时,首先调用其父类的构造函数,然后调用子类的构造函数;删除当前
     7 //     指针时,先调用子类的析构函数,然后调用父类的析构函数
     8 //3. 一个父类指针指向子类地址时,创建指针时先调用父类的构造函数,然后调用子类的构造函数;
     9 //     删除当前指针时,只调用父类的析构函数
    10 //4. 在第三种情况中,为了在删除指针时,也调用子类的析构函数,则需要将父类的析构函数声明为
    11 //   抽象的
    12 
    13 #define SAFE_DELETE(p) {delete (p);(p) = NULL;}
    14 
    15 class Person
    16 {
    17 public:
    18     Person(){
    19         cout<<"Person 构造函数"<<endl;
    20     }
    21     virtual ~Person(){
    22         cout<<"Person 析构函数"<<endl;
    23     }
    24     
    25 };
    26 
    27 class Son : public Person
    28 {
    29 public:
    30     Son(){
    31         cout<<"Son 构造函数"<<endl;
    32     }
    33     ~Son(){
    34         cout<<"Son 析构函数"<<endl;
    35     }
    36     
    37 };
    38 
    39 int main(int argc, char const *argv[])
    40 {
    41     Person *mPerson = new Person();
    42     SAFE_DELETE(mPerson);
    43 
    44 
    45     cout<<endl<<endl;
    46 
    47     Son *mSon = new Son();
    48     SAFE_DELETE(mSon);
    49 
    50     cout<<endl<<endl;
    51     
    52     Person *mPerson2 = new Son();
    53     SAFE_DELETE(mPerson2);
    54 
    55 
    56     return 0;
    57 }

    结果:

    Person 构造函数
    Person 析构函数
    
    
    Person 构造函数
    Son 构造函数
    Son 析构函数
    Person 析构函数
    
    
    Person 构造函数
    Son 构造函数
    Son 析构函数
    Person 析构函数
  • 相关阅读:
    matlab学习笔记之求解线性规划问题和二次型问题
    matlab学习笔记之基础知识(一)
    jQuery中获取特定顺序子元素(子元素种类不定)的方法
    几种常见网页布局设计
    jQuery中删除节点方法remove()、detach()、empty()分析
    jQuery实现复选框全选、全不选、反选问题解析
    window.onload和$(document).ready()比较
    redis+php微博功能的redis数据结构设计总结(四)
    redis+php实现微博功能(三)
    redis+php实现微博功能(二)
  • 原文地址:https://www.cnblogs.com/calence/p/6964605.html
Copyright © 2011-2022 走看看