类和动态内存分配

第12章 类和动态内存分配

本章内容包括:

●对类成员使用动态内存分配。
·隐式和显式地复制构造函数。
● 隐式和显式地重載赋值操作符。
● 在构造函数中使用new所必须完成的工作。
● 使用静态类成员。
● 将布局new操作符用于对象。
● 使用指向对象的指针。
● 实现队列抽象数据类型(ADT)。

本章将介绍如何对类使用new和delete以及如何处理由于使用动态内存而引起的一些微妙的问题。这
里涉及的主题好像不多,但它们将影响构造函数和析构函数的设计以及操作符的重载。
让我们看一个具体的例子 -- C++如何增加内存负载。假设要创建一个类,其中一个成员表示某人的
姓。最简单的方法是使用字符数组成员来保存姓,但这种方法有一些缺陷。开始也许会使用一个14个字符
的数组,然后发现数组太小,更保险的方法是,使用一个40个字符的数组。但是,如果创建包含2000个
这种对象的数组,就会由丁字符数组只有部分被使用而浪费大量的内存(在这种情况下,增加了计算机的
内存负载)。不过可以采取另外一种方法。
通常,最好是在程序运行时(而不是编译时)确定诸如使用多少内存等问题。对于在对象中保存姓名
来说,通常的C++方法是,在类构造函数中使用new操作符来在程序运行时分配所需的内存。但是,除非
同时执行一系列的额外步骤,如扩展类析构函数、使所有的构造函数与new析构函数协调一致、编写额外
的类方法来帮助正确完成初始化和赋值(当然,本章将介绍这些步骤),否则,在类构造函数中使用 new
将导致新的问题。对于C++初学者来说,最好先使用这种简单的字符数组方法,然后在设计好类后回到
OOP方式,使用new来改善类声明。简而言之,应循序渐进地掌握C++。

动态内存和类

您希望下个月的早餐、午餐和晚餐吃些什么?在第3天的晚餐喝多少盎司的牛奶?在第15天的早餐中
需要在谷类食品添加多少葡萄干?如果您与大多数人的习惯相似,就会等到进餐时再做决定。C++在分配
内存时采取的部分策略与此相同,让程序在运行时决定内存分配,而不是在编译时决定。这样,可根据程
序的需要,而不是根据一系列严格的存储类型规则来使用内存。C++使用new和delete 操作符来动态控制
内存。遗憾的是,在类中使用这些操作符将导致许多新的编程问题。在这种情况下,析构函数将是必不可
少的,而不再是可有可无的。有时候,还必须重载赋值操作符,以保证程序正常运行。下面来看一看这些
问题。

12.1

你可能感兴趣的:(c++)