手机
当前位置:查字典教程网 >编程开发 >C语言 >C++对象的动态建立与释放详解
C++对象的动态建立与释放详解
摘要:=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============复制代码代码如下:#...

=============下面先给出一个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;

}

运行结果:

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

同样的,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;

}

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

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

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

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

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

复制代码 代码如下:

#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;

}

//==========释放对象占用的空间=======

p=head;

Student * l;

while(p!=NULL)

{

l=p;

p=p->next;

delete l;

}

return 0;

}

运行结果:

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

【C++对象的动态建立与释放详解】相关文章:

C++类静态成员与类静态成员函数详解

VC6.0如何创建以及调用动态链接库实例详解

深入C++可见性与生命期的区别详解

深入c++中临时对象的析构时机的详解

线程池的原理与实现详解

C++二叉树结构的建立与基本操作

VC++中的字体设置方法详解

C++中函数模板的用法详细解析

C++ 类的静态成员深入解析

基于c++强制类型转换的(总结)详解

精品推荐
分类导航