C++对象的动态建立与释放详解

 更新时间:2013年10月15日 09:51:41   作者:  
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。

=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============

复制代码 代码如下:

#include<iostream>
using namespace std;
int main()
{
 int *p;//定义一个指向int型变量的指针p
 p=new int(3);//开辟一个存放整数的存储空间,返回一个指向该存储空间的的地址
 cout<<*p<<endl;
 delete p;//释放该空间
 char *p_c;
 p_c=new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
 int i;
 for(i=0;i<10;i++)
 {
  *(p_c+i)=i+'0';
 }
 for(i=0;i<10;i++)
 {
  cout<<*(p_c+i);
 }
 delete  [] p_c;
 cout<<endl;
 return 0;
}

运行结果:

同样的,new和delete运算符也可以应用于类的动态建立和删除

用new运算符动态地分配内存后,将返回一个指向新对象的指针的值,即所分配的内存空间的起始地址。用户可以获得这个地址,并用这个地址来访问对象。

当然C++还允许在执行new时,对新建的对象进行初始化。

复制代码 代码如下:

Box *pt =new Box(12,15,18);

用new建立的动态对象一般是不用对象名的,而是通过指针进行访问,它主要应用于动态的数据结构,如链表等。访问链表中的结点,并不需要通过对象名,而是在上一个结点中存放下一个节点的地址,从而用上一个结点找到下一个结点,构成连接关系。

在不再需要使用new建立的对象时,,可以用delete运算符予以释放。在执行delete运算符的时候,在释放内存空间之前,会自动调用析构函数。

复制代码 代码如下:

#include<iostream>
using namespace std;
class Box
{
 public:
  Box(int w,int l,int h);
  ~Box();
  int width;
  int length;
  int height;
};
Box::Box(int w,int l,int h)
{
 width=w;
 length=l;
 height=h;
 cout<<"========调用构造函数=======\n";
}
Box::~Box()
{
 cout<<"========调用析构函数=======\n";
}
int main()
{
 Box * p=new Box(12,13,15);
 cout<<"\n输出指针指向的对象的数据成员"<<endl;
 cout<<p->width<<"\t"<<p->length<<"\t"<<p->height<<endl;
 delete p;
 return 0;
}

然后,举一个更加实际的例子

=========================题目=======================

编写一个程序,要求先输入同学的人数,然后分别输入同学的学号、姓名和英语、数学成绩。

然后打印出所有同学的信息

复制代码 代码如下:

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class Student
{
 public:
  Student(int num, string nam, float e,float m);
  void show();
  Student * next;
 private:
  int number;
  string name;
  float English;
  float Math;
};
Student::Student(int num,string nam,float e,float m)
{
 number=num;
 name=nam;
 English=e;
 Math=m;
}
void Student::show()
{
 cout<<setiosflags(ios::left);
 cout<<setw(10)<<number;
 cout<<setw(15)<<name;
 cout<<"English:"<<setw(10)<<English;
 cout<<"Math:"<<setw(10)<<Math;
 cout<<endl;
}
int main()
{
 int i=0,n;
 cout<<"请输入同学人数:";
 cin>>n;
 Student * head=NULL;
 Student * node=NULL;
 Student * p=NULL;
 string name;
 float English;
 float Math;
 for(i=1;i<=n;i++)
 {
  cout<<"请输入第"<<i<<"个同学的姓名,英语成绩,数学成绩"<<endl;
  cin>>name>>English>>Math;
  node=new Student(i,name,English,Math);
  if(head==NULL)
   head=node;
  else
   p->next=node;
  p=node;
  if(i==n)
   p->next=NULL;
 }
 cout<<"============输出学生信息=========="<<endl;
 p=head;
 while(p!=NULL)
 {
  p->show();
  p=p->next;
 }
    //==========释放对象占用的空间=======
&nbsp; &nbsp;    p=head;
&nbsp; &nbsp;    Student * l;
       while(p!=NULL)
       {
                l=p;
                p=p->next;
                delete l;
        }
 return 0;
}

运行结果:

相关文章

  • break的使用for循环嵌套示例

    break的使用for循环嵌套示例

    这篇文章主要介绍了break的使用for循环嵌套示例,需要的朋友可以参考下
    2014-02-02
  • FFmpeg进阶教程之给视频添加文字水印

    FFmpeg进阶教程之给视频添加文字水印

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,下面这篇文章主要给大家介绍了关于FFmpeg进阶教程之给视频添加文字水印的相关资料,需要的朋友可以参考下
    2022-11-11
  • 基于C语言实现迷宫游戏的示例代码

    基于C语言实现迷宫游戏的示例代码

    这篇文章主要介绍了基于C语言如何实现简单的迷宫游戏,对于学习游戏开发的朋友相信有一定的借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 配合ffmpeg接口获取视频音频媒体信息详解

    配合ffmpeg接口获取视频音频媒体信息详解

    这篇文章主要为大家介绍了配合ffmpeg接口获取视频音频媒体信息详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • C 语言restrict 关键字的使用浅谈

    C 语言restrict 关键字的使用浅谈

    C 语言restrict 关键字的使用浅谈,需要的朋友可以参考一下
    2013-04-04
  • C++实现LeetCode(93.复原IP地址)

    C++实现LeetCode(93.复原IP地址)

    这篇文章主要介绍了C++实现LeetCode(93.复原IP地址),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中对象&类的深入理解

    C++中对象&类的深入理解

    这篇文章主要给大家介绍了关于C++中对象&类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C++学习之Lambda表达式的用法详解

    C++学习之Lambda表达式的用法详解

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名。本文就来为大家详细讲讲C++中Lambda表达式的使用,需要的可以参考一下
    2022-07-07
  • C++实现简单的希尔排序Shell Sort实例

    C++实现简单的希尔排序Shell Sort实例

    这篇文章主要介绍了C++实现简单的希尔排序Shell Sort实例,对于正在学习算法的朋友很有借鉴价值,需要的朋友可以参考下
    2014-07-07
  • C语言修炼之路函数篇真题训练下

    C语言修炼之路函数篇真题训练下

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数
    2022-03-03

最新评论