第12章 类和动态内存分配(new运算符)

12.1 动态内存和类

静态类成员:类的所有对象共享一个静态类成员。不能在类声明中初始化静态成员变量,因为声明只是描述如何分配内存但是并不分配内存。(如果静态成员是整型或枚举型const,则可以在类声明中初始化)。静态类成员可以在类声明之外使用单独的语句进行初始化,因为静态类成员是单独存储的,而不是对象的组成部分。此外,初始化要在方法文件中进行而不在头文件中。
在这里插入图片描述
在构造函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。如果使用new[]来分配内存,则应使用delete[]来释放内存。

默认构造函数:如果没有任何构造函数,C++将创建默认构造函数,编译器将提供一个不接受任何参数,也不执行任何操作的构造函数,那么它的值在初始化是未知的。
复制构造函数:将一个对象复制到新创建的对象中。新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。默认的复制构造函数逐个复制非静态成员(浅复制),复制的是成员的值。如果类中包含其值在新对象被创建时发生变化的静态数据成员,则应该提供一个显式复制构造函数来处理计数问题。另外,在复制指针时会使变量指向同一个地址。
深度复制是在复制完地址后在新对象中创建了一个地址副本。如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针。
在这里插入图片描述

类对象赋值:接受并返回一个指向类对象的引用。将已有对象赋值给另一个对象(与复制构造函数类似,不过复制构造函数是创建新对象,赋值是赋值给已存在对象)
函数应当避免将对象赋给自身,否则,给对象重新赋值时,释放内存操作可能删除对象的内容。

在这里插入图片描述

12.2 改进后的新String类

空指针:nullptr
对于静态成员函数,不能通过对象调用静态成员函数,实际上,静态成员函数甚至不能使用this指针。如果静态成员函数是在公有部分声明的,则可以使用类名和作用域解析运算符来调用它。另外,由于静态成员函数不与特定的对象相关联,因此只能使用静态数据函数。

12.3 在构造函数中使用new时应注意的事项

在这里插入图片描述
在这里插入图片描述

12.4 有关返回对象的说明

返回指向const对象的引用:如果函数返回(通过调用对象的方法或将对象作为参数)传递给它的对象,可以通过返回引用来提高其效率。返回对象将调用复制构造函数,但返回引用不会。引用指向的对象应该在调用函数执行时存在,引用对象和调用对象的类型应该相同(都是const)。
在这里插入图片描述
返回指向非const对象的引用:重载赋值运算符以及重载cout一起使用的<<运算符。
返回对象:如果返回对象是被调用函数的局部变量,则不应该按引用方式返回。
返回const对象

12.5 使用指向对象的指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值