• 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;
    }
  • 相关阅读:
    [翻译].NET Shell Extensions
    设计模式复习小结一(Strategy Pattern/Observer Pattern/Decorator Patter/Factory Pattern)
    学习定制自己的博文1
    SQLServer复习文档1(with C#)
    C#学习笔记-基础知识篇(不定期更新)
    C#学习笔记-迭代器模式
    C#学习笔记-组合模式
    C#学习笔记-备忘录模式
    C#学习笔记-适配器模式
    C#学习笔记-状态模式
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384258.html
Copyright © 2020-2023  润新知