构造函数和析构函数

 2023-04-27 12:34:09  阅读 0

在C++的类中,存在着构造函数和析构函数两个较为特殊的函数。其中,构造函数是在对象创建后立刻自动调用,析构则是在对象被释放时自动调用的函数。

具体格式如下:

 

#include <iostream>
​
class Line{
private:
    int x1;
    int y1;
    int x2;
    int y2;
public:
    Line();
    void show();
    ~Line();
};
​
int main(){
    {
        Line line;
        line.show();
    }
    return 0;
}
​
Line::Line(){
    x1 = 0;
    y1 = 0;
    x2 = 0;
    y2 = 0;
}
​
Line::~Line(){
    std::cout << "Bye~" << std::endl;
}
​
void Line::show(){
    std::cout << "x1 = " << x1 << std::endl;
    std::cout << "y1 = " << y1 << std::endl;
    std::cout << "x2 = " << x2 << std::endl;
    std::cout << "y2 = " << y2 << std::endl;
}

 

 

在上面的代码中,我们并没有在一开始就给类中的四个属性赋值,但是在line对象创建以后调用其中的show函数展示属性的值的时候,显示所有的值都是0,这就是构造函数起到了作用,之所以在main中再加上{}是为了控制line对象的释放时间,通过这样的方法可以让line在括号内部存在,在括号外面就会被释放。如此一来,在line释放的时候line就会自动调用其析构函数。然后就会在控制台上出现“Bye~”的字样。

在类中声明的时候只需要将函数的类型名字和参数写好,在定义的时候再将函数的具体功能进行实现。对类中的函数同样使用,不过在使用的时候需要加上类名来限定函数的范围。

 

通过这种方法,我们就可以较为方便的控制指针,指针在使用的时候需要手动申请手动释放,一旦忘记手动释放就会造成内存泄漏。

若是在类的构造函数中使用手动申请,在类的析构函数中释放内存,这样就可以有效的防止内存泄漏的问题。

如下:

 

#include <iostream>
​
class Data{
private:
    int* data;
public:
    Data(){
        data = new int;
        *data = 0;
    }
    ~Data(){
        delete data;
        std::cout << "delete true" << std::endl;
    }
    void show(){
        std::cout << "data = " << *data << std::endl;
    }
};
​
int main(){
    {
        Data data;
        data.show();
    }
    return 0;
}

 

下一篇: 函数重载
标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码