C++面向对象编程入门:构造函数与析构函数(四)

出处:PConline     作者:管宁      责任编辑:xietaoming

那么我们将如何编写类的析构函数呢?

  析构函数可以的特性是在程序结束的时候逐一调用,那么正好与构造函数的情况是相反,属于互逆特性,所以定义析构函数因使用"~"符号(逻辑非运算符),表示它为腻构造函数,加上类名称来定义。

  看如下代码:

 

#include <iostream
#include <string
using namespace std;   
class Teacher 

    public
    Teacher() 
    { 
        director = new char[10]; 
        strcpy(director,"王大力"); 
        //director = new string; 
        // *director="王大力";//string情况赋值 
    } 
    ~Teacher() 
    { 
        cout<<"释放堆区director内存空间1次"; 
        delete[] director; 
        cin.get(); 
    } 
    char *show(); 
    protected
    char *director; 
    //string *director; 
}; 
char *Teacher::show() 

    return director; 

class Student 

    public
    Student() 
    { 
        number = 1; 
        score = 100; 
    } 
    void show(); 
 
    protected
    int number; 
    int score; 
    Teacher teacher; 
 
}; 
 
void Student::show() 

    cout<<teacher.show()<<endl<<number<<endl<<score<<endl; 

void main() 

    Student a; 
    a.show(); 
    Student b[5]; 
    for(int i=0; i<sizeof(b)/sizeof(Student); i++) 
    { 
        b[i].show(); 
    } 
    cin.get(); 
}

  上面的代码中我们为Teacher类添加了一个名为~Teacher()的析构函数用于清空堆内存。

  建议大家编译运行代码观察调用情况,程序将在结束前也就是对象生命周期结束的时候自动调用~Teacher()

  ~Teache()中的delete[] director;就是清除堆内存的代码,这与我们前面一开始提到的。

name=input_name;//这样赋值是错误的

  有直接的关系,因为delete操作符只能清空堆空间而不能清楚桟空间,如果强行清除栈空间内存的话将导致程序崩溃!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值