C++析构函数

析构函数

每个类都有一个析构函数,当对象销毁时自动调用。

析构函数与构造函数相对。创建一个对象时,构造函数被调用,而销毁一个对象时,析构函数被调用。

当程序员没有显式地写一个析构函数时, 编译器会为每个类定义一个缺省的析构函数。

析构函数的名字与构造函数一样,只是在前面加了一个~

看下面的例子:

Circle.h

class Circle {
public:
    //无参构造函数
    Circle();
    //有参构造函数
    Circle(double);
    //析构函数
    ~Circle();
    //获取圆的面积
    double getArea();

private:
    //圆的半径
    double radius;
    //定义常量圆周率
    const double PI = 3.14159;
    //对象个数
    static int objectNumber;
};

Circle.cpp

#include "Circle.h"
#include <iostream>

using namespace std;

int Circle::objectNumber = 0;

//无参构造函数
Circle::Circle() {
    this->radius = 1;
    objectNumber++;
    cout << "当前对象的个数是" << objectNumber << endl;
}

//有参构造函数
Circle::Circle(double radius) {
    this->radius = radius;
    objectNumber++;
    cout << "当前对象的个数是" << objectNumber << endl;
}

//析构函数
Circle::~Circle(){
    objectNumber--;
    cout << "当前对象的个数是" << objectNumber << endl;
}

//获取面积
double Circle::getArea() {
    return radius*radius*PI;
}

main.cpp

#include <iostream>
#include "Circle.h"

using namespace std;

int main()
{
    //调用无参构造函数
    cout << "创建对象p1" << endl;
    Circle* p1 = new Circle;

    //调用有参构造函数,参数为1
    cout << "创建对象p2" << endl;
    Circle* p2 = new Circle(1);

    //调用有参构造函数,参数为3
    cout << "创建对象p3" << endl;
    Circle* p3 = new Circle(3);

    //销毁p1
    cout << "销毁对象p1" << endl;
    delete p1;

    //销毁p2
    cout << "销毁对象p2" << endl;
    delete p2;

    //销毁p3
    cout << "销毁对象p3" << endl;
    delete p3;

    return 0;
}

运行结果:

原文地址:https://www.cnblogs.com/bwjblogs/p/12738558.html