• 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;
    }
  • 相关阅读:
    burpsuit学习--修改来源地址
    JPEG Exif 学习
    debug 和 release 版本间堆栈平衡的区别
    sscanf用法
    磁盘学习+MBR学习
    如何进行DLL调试
    Proj THUDBFuzz Paper Reading: Order Matters: Semantic Aware Neural Networks for Binary Code Similarity Detection
    Proj THUDBFuzz Paper Reading: VulSeeker-Pro: Enhanced Semantic Learning Based Binary Vulnerablity Seeker with Emulation
    Asynchronous Programming in Rust
    Proj THUDBFuzz Paper Reading: MemLock: Memory Usage Guided Fuzzing
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384258.html
Copyright © 2020-2023  润新知