龙空技术网

一文带你学习C++析构函数

音视频开发老舅 207

前言:

如今大家对“波浪线符号怎么打在中间”大致比较关怀,我们都需要知道一些“波浪线符号怎么打在中间”的相关知识。那么小编同时在网摘上搜集了一些对于“波浪线符号怎么打在中间””的相关内容,希望咱们能喜欢,朋友们快快来了解一下吧!

C++析构函数的学习

在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用。一个对象生命周期的终止可以发生在以下情况:

函数执行完毕对象被显式删除对象超出范围

在这些情况下,析构函数都会被调用,该函数负责清除对象占用的内存空间和释放其他资源。析构函数的语法如下:

class ClassName {public:    ClassName(); // 构造函数    ~ClassName(); // 析构函数};

可以看到,在类中声明析构函数时,在函数名前加上了一个波浪线符号“~”,这用来表示这是一个析构函数。与构造函数一样,析构函数也可以被重载

接下来,我们将介绍C++析构函数的一些重要知识点,并提供相应代码示例

析构函数的基本使用

当构造函数创建一个对象时,它使用new运算符分配内存。在对象不再需要时,我们需要使用delete运算符来释放内存。在这种情况下,析构函数就可以派上用场。下面是一个简单的示例:

#include<iostream> using namespace std; class Number {private:    int* ptr;public:    Number() {        ptr = new int;        *ptr = 0;    }      ~Number() {        delete ptr;    }      int getValue() {        return *ptr;    }        void setValue(int value) {        *ptr = value;    }};int main() {    Number obj1;    obj1.setValue(5);    cout << obj1.getValue() << endl;    return 0;}

在这个示例中,我们使用了一个指向整数的指针,并在构造函数中为其分配内存。在析构函数中,我们使用delete运算符来释放该指针的内存空间。这个程序打印出5,表明成功对obj1中的整数值进行了修改

领C++资料→「链接」

多个析构函数的使用

如果在类中定义了多个析构函数,无论是因为函数重载,还是出于其他原因,它们都会按照与它们的构造函数相同的顺序被自动调用 ,下面是一个示例:

#include<iostream> using namespace std; class Student {private:    int age;    char* name;public:    Student() {        age = 0;        name = new char[10];    }    Student(int a, char* n) {        age = a;        name = new char[strlen(n) + 1];        strcpy(name, n);    }      ~Student() {        delete [] name;    }    void display() {        cout<<"Name: "<<name<<" Age: "<<age<<endl;    }};int main() {    Student obj1(19, "John");    Student obj2(21, "Peter");    obj1.display();    obj2.display();    return 0;}

在这个示例中,我们定义了两个构造函数,一个默认的和一个带参数的。当我们创建两个对象时,分别使用了这两个不同的构造函数。在析构函数中,我们释放了为name指针分配的内存空间,而不管哪个构造函数被使用,这样就避免了内存泄露

继承中的析构函数

在继承中,基类的析构函数会在派生类的析构函数之前被自动调用,因此必须在基类中定义一个虚析构函数。这允许派生类中的任何资源在析构之前被清理。下面是一个示例:

#include<iostream> using namespace std; class Shape {public:    Shape() {        cout<<"Shape constructor\n";    }      virtual ~Shape() {        cout<<"Shape destructor\n";    }};class Square: public Shape {public:    Square() {        cout<<"Square constructor\n";    }      ~Square() {        cout<<"Square destructor\n";    }};int main() {    Shape* shape = new Square();    delete shape;    return 0;}

在这个示例中,我们定义了一个Shape基类和一个Square派生类。由于Shape类定义了虚拟析构函数,当我们通过基类指针delete Square对象时,它将首先调用Shape类的析构函数,然后再调用Square类的析构函数,确保派生类中的任何资源被清理

总结

在本文中,介绍了C++析构函数的基本知识点,包括在内存分配和释放、多个析构函数的使用和继承中的析构函数。强调了析构函数负责清理对象占用的内存空间和释放其他资源,在对象的生命周期结束时被自动调用

需要注意的是,在使用析构函数时,必须确保不会在它们已被调用的对象上进行任何操作,否则可能会出现严重的编程错误。另外,在使用多个析构函数时,它们的顺序非常重要,应该按照构造函数的顺序进行调用

标签: #波浪线符号怎么打在中间