析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值。 一个类有且仅有一个析构函数。如果定义类时没写析构函数,则编译器生成默认析构函数。如果定义了析构函数,则编译器不生成默认析构函数。 析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。例如,对象如果在生存期间用 new 运算符动态分配了内存,则在各处写 delete 语句以确保程序的每条执行路径都能释放这片内存是比较麻烦的事情。有了析构函数,只要在析构函数中调用 delete 语句,就能确保对象运行中用 new 运算符分配的空间在对象消亡时被释放。 析构函数(destructor)也是一种成员函数,但它的作用与构造函数相反,用来在系统释放对象前做一些清理工作,如利用delete运算符释放临时分配的内存,清零某些内存单元等.当一个对象生存期结束时,系统会自动调用该对象所属类的析构函数; 构造函数的名称与类名相同,而析构函数的名称必须在类名前加上"~"符号;注意,构造函数和析构函数不能指定任何返回值类型,包括void返回类型; 举例:难道再构造函数中分配了内存,就需要申明析构函数,释放内存?如果在一个类的函数中new了下,然后没有显式的声明析构函数,new出的内存会有问题吗?当然平时需要保持,new必delete的习惯; 析构函数只是给你提供了一种机制,让你可以去释放内存,清除指针。但是实际的内容需要你去添加。 例如 delete ptr; ptr=NULL; 如果你不添加这些内容,析构函数是什么也不会做的。 ????什么时候必须手动添加析构函数????? 只有从堆上分配成员变量时,才需要析构函数 构造函数和析构函数自己不定义的话是系统默认有的.. 是自动调用的..自定义的构造函数和析构函数只是附加了自己想要的东西.
通常,只有在类持有某些比较重要的资源时才创建析构函数,而当对象离开时必须清理这些资源。 编写正确的析构函数是非常困难的。 在测试编译器中处理析构函数的部分时可能需要手动创建。 但是在生产代码中,从来不需要这样做。