默认的析构函数用法 默认析构函数

默认的析构函数

我们迄今使用过的所有对象都是被类的默认析构函数自动销毁的。如果我们不自行定义析构函数,编译器就总是生成默认的析构函数。默认的析构函数不能删除new运算符在自由存储器中分配的对象或对象成员。如果类成员占用的空间是在构造函数中动态分配的,我们就必须自定义析构函数,然后显式使用delete运算符来释放构造函数使用new运算符分配的内存,就像销毁普通变量一样。我们需要在编写析构函数方面实践一下,因此下面就来试一试。

试一试:简单的析构函数

为了解何时调用类的析构函数,我们可以在CBox类中添加析构函数。下面是本示例的代码,其中包括的CBox类有一个析构函数:

  1. //Ex8_01.cpp
  2. //Classwithanexplicitdestructor
  3. #include<iostream>
  4. usingstd::cout;
  5. usingstd::endl;
  6. classCBox
    //Classdefinitionatglobalscope
  7. {
  8. public:
  9. //Destructordefinition
  10. ~CBox()
  11. {
  12. cout<<"Destructorcalled."<<endl;
  13. }
  14. //Constructordefinition
  15. CBox(doublelv=1.0,doublewv=1.0,doublehv=1.0):
  16. m_Length(lv),m_Width(wv),m_Height(hv)
  17. {
  18. cout<<endl<<"Constructorcalled.";
  19. }
  20. //Functiontocalculatethevolumeofabox
  21. doubleVolume()const
  22. {
  23. returnm_Length*m_Width*m_Height;
  24. }
  25. //Functiontocomparetwoboxeswhichreturnstrue
  26. //ifthefirstisgreaterthatthesecond,andfalseotherwise
  27. intcompare(CBox*pBox)const
  28. {
  29. returnthis->Volume()>pBox->Volume();
  30. }
  31. private:
  32. doublem_Length;
    //Lengthofaboxininches
  33. doublem_Width;
    //Widthofaboxininches
  34. doublem_Height;
    //Heightofaboxininches
  35. };
  36. //FunctiontodemonstratetheCBoxclassdestructorinaction
  37. intmain()
  38. {
  39. CBoxboxes[5];
    //ArrayofCBoxobjectsdeclared
  40. CBoxcigar(8.0,5.0,1.0);//Declarecigarbox
  41. CBoxmatch(2.2,1.1,0.5);//Declarematchbox
  42. CBox*pB1=&cigar;
    //Initializepointertocigarobjectaddress
  43. CBox*pB2=0;
    / /PointertoCBoxinitializedtonull
  44. cout<<endl
  45. <<"Volumeofcigaris"
  46. <<pB1->Volume();
    //Volumeofobj.pointedto
  47. pB2=boxes;
    //Settoaddressofarray
  48. boxes[2]=match;
    默认的析构函数用法 默认析构函数
    //Set3rdelementtomatch
  49. cout<<endl
  50. <<"Volumeofboxes[2]is"
  51. <<(pB2+2)->Volume();//Nowaccessthrupointer
  52. cout<<endl;
  53. return0;
  54. }

示例说明

CBox类的析构函数仅仅显示一条宣称"析构函数被调用"的消息。该示例的输出如下:

  1. Constructorcalled.
  2. Constructorcalled.
  3. Constructorcalled.
  4. Constructorcalled.
  5. Constructorcalled.
  6. Constructorcalled.
  7. Constructorcalled.
  8. Volumeofcigaris40
  9. Volumeofboxes[2]is1.21
  10. Destructorcalled.
  11. Destructorcalled.
  12. Destructorcalled.
  13. Destructorcalled.
  14. Destructorcalled.
  15. Destructorcalled.
  16. Destructorcalled.
在程序结束时,每个对象都需要调用一次析构函数。每出现一次构造函数的调用,就有一次匹配的析构函数调用。在这里,我们不需要显式调用析构函数。当某个类对象无效时,编译器将自动安排调用该类的析构函数。本示例中,析构函数的调用发生在main()函数的执行结束之后,因此在main()函数安全终止之后因析构函数存在错误而使程序崩溃也是非常有可能的。

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/260901.html

更多阅读

C#虚函数抽象函数接口虚函数的运用 虚函数和抽象函数

虚函数(virtual):可由子类继承并重写的函数,后期绑定抽像函数(abstract):规定其非虚子类必须实现的函数,必须被重写(override实现)。抽象类不能被实例化,抽象方法必须是空方法,由派生类去实现它(重载)接口(interface):必须重写(实现接口必须重写接口中

Excel中COLUMN函数的使用 excel函数的使用方法

Excel中COLUMN函数的使用——简介COLUMN函数是一个简单的辅助函数,在一些复杂的函数计算中会使用到COLUMN函数,但是一般都不会对COLUMN函数作解析,很多朋友对公式函数中突然插入“=COLUMN()”表示理解。这里,为大家介绍COLUMN函数的使用。

白醋的美容作用及用法 精 白醋美容

白醋的美容作用及用法 精——简介白醋是醋的一种,它无色,味道单纯是烹饪中常用的调味品。白醋物美价廉,它不仅是我们日常生活中的必需品,还具有美容作用。由于白醋能够达到软化皮肤角质层的作用,具有一定的杀菌作用,所以正确合理的利用白

函数指针返回指向函数的指针 指向函数的指针

准确地讲,本文所涉及的内容是C++中较难理解的,本文的目的不是在于将它们解释清楚,因为这需要你循序渐进地做很多练习才可以。看下面一个例子:int (*func(bool real))(int, int) 你觉得它的返回值是什么?这里就涉及到了如何理解指向函数

Crect的成员函数 类的静态成员函数

CRect类(矩形类)无基类【说 明】CRect类与Windows系统中表示矩形RECT结构相似,并且它还提供了操作RECT结构的成员函数。在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect类的对象。注意,这个类是从tagRECT结构派

声明:《默认的析构函数用法 默认析构函数》为网友王者孤独分享!如侵犯到您的合法权益请联系我们删除