C++:this指针和构造与析构的运用--2

简介: C++:this指针和构造与析构的运用--2

C++:this指针和构造与析构的运用--1https://developer.aliyun.com/article/1424570?spm=a2c6h.13148508.setting.15.214f4f0eDzCQ1n

三,析构函数

析构函数:在销毁对象前,自动的完成清理工作,即在对象生命周期结束时将会清理空间资源。


特征:


       1,析构函数的函数名是在类名前加上一个符号 ‘~’。


       2,析构函数无参数且无返回值类型。


       3,一个类中只能有一个析构函数,若没有自己定义,系统会自动生成一个默认析构函数。


       4,在对象的生命周期结束时,系统将会自动调用析构函数。


注意:


       1,由于析构函数没有参数,因此此函数不支持重载。


       2,析构函数的权限设置跟构造函数的设置一样,一般都要设置为public。


       3,类的析构函数调用一般按照构造函数调用的相反顺序进行调用,即倒序,但要注意static和全局变量的情况,存储静态区的将会在整个代码结束后才会调用。


       4,默认析构函数跟默认构造函数一样,只对自定义类型成员处理,即自定义类型成员会去调用他的析构函数,而内置类型成员不做任何处理。


       5,析构函数只能释放该对象本身所占用的空间,但对象内部所指向的内存空间或其它空间没有被释放,最终将会造成内存泄漏。


       6,由第2条可知,如果类中没有申请资源时,析构函数可不写,直接使用编译器生成的默认析构函数即可。因为当对象的生命周期结束后空间就自动销毁了,也就还给操作系统了,但是如果在堆区中开辟了空间就需要在析构函数中自己完成清理工作。


样例示范一:


class Time
{
public:
    //首先权限设置必须为public,否则结束时将不可调用,将会出错
    //其次,类对象的成员中没有在堆区中占用空间,可不写析构函数
    ~Time()
    {
        cout << "~Time()" << endl;
    }
private:
    int _hour;
    int _minute;
    int _second;
};


样例示范二:


class Stack
{
public:
    Stack(size_t capacity = 3)
    {
        _array = (int*)malloc(sizeof(int) * capacity);
        _capacity = capacity;
        _size = 0;
    }
    void Push(int data)
    {
        _array[_size] = data;
        _size++;
    }
    //首先权限要设置为public
    //动态开辟空间,需要在析构函数中释放动态空间
    ~Stack()//析构函数中不能有参数
    {
        if (_array)
        {
            free(_array);
            _array = NULL;
            _capacity = 0;
            _size = 0;
        }
    }
private:
    int* _array;
    int _capacity;
    int _size;
};

C++:this指针和构造与析构的运用--3https://developer.aliyun.com/article/1424578?spm=a2c6h.13148508.setting.33.214f4f0eDzCQ1n

相关文章
|
19天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
38 9
|
7天前
|
C++
【C++11(三)】智能指针详解--RAII思想&循环引用问题
【C++11(三)】智能指针详解--RAII思想&循环引用问题
|
7天前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
9 0
|
7天前
|
存储 人工智能 C++
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
27 1
|
7天前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
17 1
|
8天前
|
数据安全/隐私保护 C++
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++中的构造函数是特殊成员函数,用于对象初始化。类型包括默认构造函数(无参数)、带参数构造函数、拷贝构造函数和移动构造函数。默认构造函数设置对象默认状态,带参数构造函数允许传递初始化值。拷贝构造函数复制已有对象,移动构造函数高效转移资源。构造函数的访问权限可控制为public、private或protected。理解构造函数有助于编写健壮的C++代码。关注公众号`Let us Coding`获取更多内容。
21 0
|
14天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
|
20天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
20天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
27 0
|
26天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
14 0