C++语言程序设计

动态对象创建
有时我们知道程序中需要创建多少对象，但是多数情况下，我们不能预知所需对象的确切数量。比如公路交通管理系统必须同时处理多少辆汽车？一个三维建筑设计系统需要处理多少个模型？解决这些编程问题的方法，是要能够支持在运行时动态创建和销毁对象。
一个对象被动态创建时，依次发生两件事情：
1． 为对象分配内存；
2． 调用构造函数来初始化这块内存。
同样，一个对象被动态销毁时，按照顺序发生了下面两件事情：
1． 调用析构函数清除对象；
2． 释放对象的内存；
C++提供了两个运算符new和delete，分别用来完成动态对象的创建和销毁。当我们用new创建一个对象时，就在堆里为对象分配内存并调用相应的构造函数。new返回一个指向刚刚创建的对象的指针；当我们用delete销毁一个对象时，就调用相应的析构函数，释放掉分配的堆内存，delete运算符的操作数是指向对象的指针。需要注意的是：用new创建的对象必须用delete销毁，否则，会出现内存泄漏。
举个例子说明利用new和delete动态创建和销毁对象的过程：

| 例10-7

#include <iostream.h>
class Tree
{
public:
Tree(int height)
{
cout<<"tree object is creating"<<endl;
this->height = height;
}
~Tree()
{
cout<<"tree object is deleting"<<endl;
}
void display()
{
cout<<"this tree is "<<height<<" meters high"<<endl;
}
private:
int height;
};
void main()
{
Tree* tree = new Tree (100);
tree->display();
delete tree;
}

程序的输出结果如下：
tree object is creating
this tree is 100 meters high
tree object is deleting
main( )函数中的第一个语句，是用new运算符动态创建一个Tree类对象，new后面括号中的100，实际上是new创建对象时，传给构造函数的参数。main( )函数的第二个语句是调用对象的显示函数，打印出的结果显示树高为100米，可见new操作符确实调用了类的构造函数display。main( )函数的最后一个语句用delete运算符销毁用new创建的对象。对象一旦被销毁后，就不再存在。如果继续访问对象tree的数据成员或成员函数，则程序会产生错误。