《C++程序设计教程》笔记之堆

堆:

 

全局数据区
代码区
堆区
栈区

       在C++中,从堆中分配和存储内存空间使用操作符new 和delete。在内存中开辟空间后,必须在使用完毕后释放内存空间,否则造成内存泄漏。

      

 

       为什么使用new和delete?

       在C语言中,使用malloc函数来开辟空间,使用free()函数释放,但在class使用过程中,会无法调用析构函数。看下面代码:

//---main.cpp---

#include<iostream>

#include<malloc.h>

#include"student.h"



using namespace std;



int main()

{

    Student *p;

    p=(Student*)malloc(sizeof(Student));

    p->print();

    free(p);

    return 0;

}
//---student.h---



#include<iostream>



using namespace std;



class Student{

    protected:

        string name;

        int year;

        float gpa;



    public:

        Student(){

        name="your_name";

        year=19;

        gpa=5.0;

        }

        void init(string,int,float);

        void print();

        ~Student(){

            cout<<"------end-----"<<endl;

        };

};



void Student::init(string name,int year,float gpa){

    this->name=name;

    this->year=year;

    this->gpa=gpa;

}



void Student::print(){

    cout<<"name->"<<name<<",year->"<<year<<",gpa->"<<gpa<<endl;

}

       在main.cpp中,创建了一个指向Student类的指针,然后使用malloc函数为其开辟空间,使用free函数释放空间。

       注意:上面的代码无法执行,

        同时,使用malloc函数也不会调用析构函数!

       所以,在C++·中,使用new为class类型开辟空间。

#include<iostream>

#include<malloc.h>

#include"student.h"



using namespace std;



int main()

{

    Student *p;

    p= new Student;

    p->print();

    delete p;

    return 0;

}

执行结果为

name->your_name,year->19,gpa->5

------end-----

从堆中分配对象数组:

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值