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;
    }
  • 相关阅读:
    Centos7 系统更改apache默认网站目录(解决You don't have permission to access / on this server问题)
    1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)
    1-3 RHEL7操作系统的安装
    1-18-1 LVM管理和ssm存储管理器使用&磁盘配额(一)
    【转载】CentOS7下使用LVM给系统硬盘扩容
    自动备份Mysql数据库脚本
    docker安装nginx并配置通过https访问
    搭建本地yum源和局域网yum源
    【转载】使用Docker Hub官方gcc:latest镜像编译C/C++程序以及缩小镜像的方法
    【转载】如何使用docker部署c/c++程序
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384258.html
Copyright © 2011-2022 走看看