对象的动态建立和释放,对象的赋值和复制

1、对象的动态建立和释放

1、如果在一个函数中定义了一个对象,只有在该函数结束时,该对象才释放。

当在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占内存空间以供别的数据使用,以提高内存空间的利用率。

2、 运算符:

分配内存运算符:new

释放内存运算符:delete

//如果已经定义了一个Box类,用new动态地建立一个对象
new Box;//这个存在,但是用户无法访问这个对象,因为这个对象没有对象名,用户也不知道它的地址
//返回一个指向新对象的指针
Box *pt;//定义一个指向Box类对象的指针变量pt
pt=new Box;//在pt中存放了新建对象的起始地址
//访问新建立的对象
cout<<pt->height;//输出该对象的height成员
cout<<pt->volume();//调用该对象的volume函数,计算输出体积

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

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

判断:

在执行new运算时,如果内存量不足,无法开辟所需的内存空间,大多数C++编译系统都使new返回一个0指针值(NULL)。只要检测返回值是否为0,就可以判断分配内存是否成功。

2、释放内存

当不再需要使用由new建立的对象时,可以用delete运算符予以释放。

delete pt;//释放pt指向的内存空间

2、对象的赋值和复制

1、对象的赋值

形式为:

对象名1=对象名2;

//对象名1和对象名2必须属于同一个类
Student stud1,stud2;//定义两个同类的对象
.
.
.
stud2=stud1;//将stud1赋给stud2

说明:

1、对象的赋值只是对其中数据成员的赋值,而不对成员函数赋值。

2、类的数据成员中不能包括动态分配的数据,否在在赋值时可能出现严重后果。

2、对象的复制

对象的复制其一般形式为:

类名 对象2(对象1);

Box box2(box1);

还有一种复制方法:

类名 对象名1=对象名2;

3、普通构造函数和复制构造函数的区别

类名(形参表列);//普通构造函数的声明

类名(类名&对象名);//复制构造函数的声明

Box(int h,int w,int len)//普通构造函数
Box(Box &b);//复制构造函数
void fun(Box b)//形参是类的对象
{}
int main()
{
    Box box(12,15,18);
    fun(box1);//实参是类的对象,调用函数时将复制一个新对象b
    return 0;
}

上面的是:

当函数参数为类的对象,在调用函数时要将实参对象完整地传递给形参,也就是需要建立一个实参的拷贝,调用复制函数。

3、函数的返回值是类的对象。在函数调用完毕将返回值带回函数调用处时。此时需要将函数中的对象复制一个临时对象并传给该函数的调用处。

Box f()//函数f的类型为Box类类型
{
        Box box1(12,15,18);
        return box1;//返回值时Box类的对象
}
int main()
{
    Box box2;//定义Box类的对象box2
    box2=f();//调用f函数,返回Box类的临时对象,并将它赋值给box2
    return 0;
}
//其中在调用f函数结束时,box1的生命周期就结束了,而不是将box1带回main函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值