zoukankan      html  css  js  c++  java
  • C++ new delete

    01_对象和malloc

    #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;
    
        //malloc仅仅是分配一个空间,没有任何初始化的行为
        Student *pstu1 = (Student*)malloc(sizeof(Student));
        pstu1->id =1001;
        strcpy(pstu1->name,"zhangsan");
        pstu1->age=20;
        pstu1->score=100;
        //pstu1->set_age(20);
    
        cout<<pstu1->id<<endl;
        //free仅仅是一个空间的回收,没有任何析构的行为
        free(pstu1);
    
        return 0;
    }
    

    02_对象和new

    #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;
    
    //  Student *pstu1 = (Student*)malloc(sizeof(Student));
        //new完成的事情分两步:
        //1,申请空间,此处和malloc做的一样
        //2,调用对应的构造函数,进行初始化
        //3,返回的地址不用强制类型转换
        Student *pstu2 = new Student(1001,"zhangsan",20,100);
        /*
        pstu1->id =1001;
        strcpy(pstu1->name,"zhangsan");
        pstu1->age=20;
        pstu1->score=100;
        //pstu1->set_age(20);
    */
    //  cout<<pstu1->id<<endl;
        cout<<pstu2->id<<endl;
    //  free(pstu1);
        //delete做的事情分两步:
        //1,先调用析构函数
        //2,然后再释放对象本身
        delete pstu2;
        pstu2 =nullptr;
        pstu2->age=21;
    
        return 0;
    }
  • 相关阅读:
    【BZOJ 4151 The Cave】
    【POJ 3080 Blue Jeans】
    【ZBH选讲·树变环】
    【ZBH选讲·拍照】
    【ZBH选讲·模数和】
    【CF Edu 28 C. Four Segments】
    【CF Edu 28 A. Curriculum Vitae】
    【CF Edu 28 B. Math Show】
    【CF Round 439 E. The Untended Antiquity】
    【CF Round 439 C. The Intriguing Obsession】
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384258.html
Copyright © 2011-2022 走看看