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

    1析构函数.

    #include<iostream>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    struct Student{
        int id=1001;//成员变量或对象
        char *name=nullptr;
        int age=20;
        int score=99;
        Student(){cout<<"student default construction!"<<endl;}
        Student(int i,const char*n, int a,int s){
            id=i;
            if(n){
                name =(char*)malloc(strlen(n)+1);
                strcpy(name,n);
            }
            age=a;score=s;
        }
    
        //析构函数是释放初始化的变量(在构造函数里做过内存申请的)
        //析构函数不可以重载
        ~Student()
        {
            cout<<"called destructor!"<<endl;
            if(name)free(name);
        }
    
    };//end class Student
    
    int main()
    {
        Student stu1(1002,"lisi",20,90);
    //  Student *pstu1 = new Student();
        cout<<stu1.name<<endl;
        return 0;
    }

    2 构造和析构的顺序

    #include<iostream>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    struct Student{
        int id=1001;//成员变量或对象
        char *name=nullptr;
        int age=20;
        int score=99;
        Student(){cout<<"student default construction!"<<endl;}
        Student(int i,const char*n, int a,int s){
        cout<<"student "<<n<<" construction!"<<endl;
            id=i;
            if(n){
                name =(char*)malloc(strlen(n)+1);
                strcpy(name,n);
            }
            age=a;score=s;
        }
        //析构函数是释放初始化的变量
        //析构函数不可以重载
        ~Student()
        {
            cout<<"student "<<name<<" destructor!"<<endl;
            if(name)free(name);
        }
    
    };//end class Student
    
    int main()
    {
        Student stu1(1002,"lisi",20,90);
        Student stu2(1003,"maliu",20,90);
    //  cout<<stu1.name<<endl;
        return 0;
    }

    3 类类型成员的构造和析构

    #include<iostream>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    struct book_bag{
        int color;
        int book_sum;
        book_bag(){
            cout<<"book default constrcution!"<<endl;
        }
        book_bag(int c, int b){
            cout<<"book constrcution!"<<endl;
            color =c,book_sum = b;
        }
        ~book_bag(){
            cout<<"book destrcutor!"<<endl;
        }
    };
    struct Student{
        int id=1001;//成员变量或对象
        char *name=nullptr;
        int age=20;
        int score=99;
        book_bag bg;
    
        Student(){cout<<"student default construction!"<<endl;}
        Student(int i,const char*n, int a,int s){
        cout<<"student "<<n<<" construction!"<<endl;
            id=i;
            if(n){
                name =(char*)malloc(strlen(n)+1);
                strcpy(name,n);
            }
            age=a;score=s;
        }
        //析构函数是释放初始化的变量
        //析构函数不可以重载
        ~Student()
        {
            cout<<"student "<<name<<" destructor!"<<endl;
            if(name)free(name);
        }
    
    };//end class Student
    
    int main()
    {
        Student stu1(1002,"lisi",20,90);
        Student stu2(1003,"maliu",20,90);
    //  cout<<stu1.name<<endl;
        return 0;
    }
    
  • 相关阅读:
    解释DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    MySQL性能优化
    MySQL中的binlog相关命令和恢复技巧
    保障MySQL安全的14个最佳方法
    MySQL忘记root密码的解决方案
    MySQL利用binlog来恢复数据库
    MySQL命令mysqldump参数大全
    MySQL REPLACE替换输出
    MySQL -A不预读数据库信息(use dbname 更快)
    MySQL 慢查询配置
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384259.html
Copyright © 2011-2022 走看看