01-类和动态内存分配
第12章 类和动态内存分配
本章内容包括:
- 对类成员使用动态内存分配;
- 隐式和显式复制构造函数;
- 隐式和显式重载赋值运算符;
- 在构造函数中使用new所必须完成的工作;
- 使用静态类成员;
- 将定位new运算符用于对象;
- 使用指向对象的指针;
- 实现队列抽象数据类型(ADT)。
本章将介绍如何对类使用new和delete以及如何处理由于使用动态内存而引起的一些微妙的问题。这里涉及的主题好像不多,但它们将影响构造函数和析构函数的设计以及运算符的重载。
来看一个具体的例子——C++如何增加内存负载。假设要创建一个类,其一个成员表示某人的姓。最简单的方法是使用字符数组成员来保存姓,但这种方法有一些缺陷。开始也许会使用一个14个字符的数组,然后发现数组太小,更保险的方法是,使用一个40个字符的数组。然而,如果创建包含2000个这种对象的数组,就会由于字符数组只有部分被使用而浪费大量的内存(在这种情况下,增加了计算机的内存负载)。但可以采取另一种方法。
通常,最好是在程序运行时(而不是编译时)确定诸如使用多少内存等问题。对于在对象中保存姓名来说,通常的C++方法是,在类构造函数中使用new运算符在程序运行时分配所需的内存。为此,通常的方法是使用string类,它将为您处理内存管理细节。但这样您就没有机会更深入地学习内存管理了,因此这里将直接对问题发起攻击。除非同时执行一系列额外步骤,如扩展类析构函数、使所有的构造函数与new析构函数协调一致、编写额外的类方法来帮助正确完成初始化和赋值(当然,本章将介绍这些步骤),否则,在类构造函数中使用new将导致新问题。