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 析构函数
  • 相关阅读:
    初次用SqlServer查看本地的Excel文件时需要注意的地方
    Oracle字符集的查看查询和Oracle字符集的设置修改(转)
    Oracle查字符集查版本号
    NoClassDefFoundError: org/springframework/boot/bind/RelaxedDataBinder
    Unknown initial character set index '255' received from server. Initial client character 解决方法
    Oracle查看用户密码过期,修改永不过期
    XPath 爬虫解析库
    Python 之 PyMySQL 安装和使用
    Python使用场景和应用领域
    Python基本语法变量
  • 原文地址:https://www.cnblogs.com/calence/p/6964605.html
Copyright © 2011-2022 走看看