C++语言程序设计

用析构函数确保对象的清除
我们常常不会忽略初始化的重要性，却很少想到清除的重要性。实际上，清除也很重要，例如，我们在堆中申请了一些内存，如果不在用完后就释放，就会造成内存泄露，它会导致应用程序运行效率降低，甚至崩溃，我们不可掉以轻心。在C++中，提供了析构函数，保证对象清除工作的自动执行。
析构函数与构造函数不同点是：析构函数的功能与构造函数相反，也不带任何参数，所以，它不能被重载。当对象超出其作用域被销毁时，析构函数会被自动调用。
下面我们仍用Tree类例子来说明构造函数和析构函数的调用情况。

| 例10-9

#include <iostream.h>
class Tree
{
int height;
public:
Tree (int initialHeight); //Constructor
~Tree (); //Destructor
void grow(int years);
void printsize();
};
Tree:: Tree (int initialHeight)
{
height = initialHeight;
}
Tree::~ Tree ()
{
cout<<"inside tree destructor"<<endl;
printsize();
}
void Tree::grow(int years)
{
height += years;
}
void Tree::printsize()
{
cout<<"tree height is "<<height<<endl;
}
void main()
{
cout<<"before opening brace"<<endl;
{
Tree t(12);
cout<<"after tree creation"<<endl;
t.printsize();
t.grow(4);
cout<<"before closing brace"<<endl;
}
cout<<"after closing brace"<<endl;
}

下面是上面程序的输出结果：
before opening brace
after tree creation
tree height is 12
before closing brace
inside tree destructor
tree height is 16
after closing brace
我们可以看到，析构函数在包含它的右括号处调用。
关于返回值
构造函数和析构函数是两个非常特殊的函数：它们没有返回值。这与返回值为void的函数是不同的。后者虽然也不返回任何值，但有返回类型，而构造函数和析构函数根本就没有返回类型。