• C++构造函数、析构函数、虚析构函数


    1.构造函数

      C++中的构造函数是用于初始化类的各种变量以及分配资源等。主要的注意事项是:

      (1)在继承关系中先初始化父类对象后初始化子类对象。

      (2)在一个类中按照变量的声明顺序,对类中的变量进行初始化

      (3)初始化过程中,可以使用已经被初始化的对象去初始化其他的对象。

    2.析构函数

      析构函数与构造函数作用相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

      析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

      调用顺序与构造函数正好相反,先析构子类(释放子类资源),在析构父类(释放父类资源)。

    3.虚析构函数

      虚析构函数可以认为是特殊的析构函数,主要作用在继承关系中。

      若B是A的子类:  A *a=new B;

              delete a;

      如果A的析构函数是non-vartual,则只会调用A的析构函数,这样B的资源没有释放,就会有内存泄露;

      如果A的析构函数是vartual,则只会先调用A的析构函数,再调用B的析构函数。

      (见C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

    4.代码示例

     1 #include <iostream>
     2 using namespace std;
     3 class A{
     4 public:
     5     A(int _a):a(_a){
     6         cout<<"A constructed function"<<endl;
     7     }
     8 
     9     virtual ~A(){
    10         cout<<"A destructor function"<<endl;
    11     }
    12 
    13     int getA(){
    14         return a;
    15     }
    16 private:
    17     int a;
    18 };
    19 
    20 class B:public A{
    21 public:
    22     B(int _a,int _b):b(_b),A(_a){
    23         cout<<"B constructed function"<<endl;
    24     }
    25 
    26     ~B(){
    27         cout<<"B destructor function"<<endl;
    28     }
    29 
    30     int getAplusB(){
    31         return b+getA();
    32     }
    33 private:
    34     int b;
    35 };
    36 
    37 int main(void)
    38 {
    39     B b(2,3);
    40     cout<<b.getAplusB()<<endl;
    41     cout<<"***********************************"<<endl;
    42     A *a=new B(2,3);
    43     cout<<"***********************************"<<endl;
    44     delete a;
    45     return 0;
    46 }

     执行输出:

     

  • 相关阅读:
    Tool工具页面代码
    Tool工具生成代码数据库Model生成代码
    类别切换 分页
    ASP.NET AJAX无刷新验证用户名
    VSS的配置和使用
    js 常用方法大全
    灵异——1995年北京330路公交车失踪案
    C#用HttpWebRequest通过代理服务器验证后抓取网页内容 。。。。。
    win2003远程 客户端无法连接到远程计算机。
    .net中点击button按钮显示下一条记录(上一条 下一条)
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/3557493.html
Copyright © 2020-2023  润新知