C++析构函数

简介:

功能:销毁对象前执行清除工作

格式:

[类名::]~类名()

{

   ....

}

class Student
{public:
    Student(...);
    ~Student();//~符号
    void display()const;
private:
    int    m_iNum;
    string m_strName;
    char   m_cSex;  
};
Student::~Student()
{ cout<<"Destructor "<<endl;}
… …

注意:

函数名与类名相同,且函数名前加~

没有参数、不能被重载

不指定返回值

常定义为public

对象生命期结束时自动调用

思考:

通常不需人为定义析构函数,什么时候必须定义析构函数?

一般,当类中含有指针成员,并且在构造函数中用指针指向了一块堆中的内存,则必须定义析构函数释放该指针申请的动态空间

#include<iostream>
using namespace std;

class String
{
public:
    String();
    void display() const;
private:
    char *m_pstr;
};

String::String()
{
    m_pstr = new char[1000];
    strcpy(m_pstr, "hello");
}
void String::display() const
{
    cout<<m_pstr<<endl;
}
/*
String::~String()
{
    //系统生成的
}
*/
int main()
{
    String str;
    str.display();
    system("pause");
    return 0;
} 

看下面的代码,使用自己定义的析构函数--示例代码1:

#include<iostream>
using namespace std;

class String
{
public:
    String();
    ~String();
    void display() const;
private:
    char *m_pstr;
};

String::String()
{
    m_pstr = new char[1000];
    strcpy(m_pstr, "hello");
}
String::~String()
{
    delete []m_pstr;
}
void String::display() const
{
    cout<<m_pstr<<endl;
}

int main()
{
    String str;
    str.display();
    system("pause");
    return 0;
} 

示例代码2:

#include<iostream>
using namespace std;

class String
{
public:
    String(char *ap = "china");
    ~String();
    void display() const;
private:
    char *m_pstr;
};

String::String(char *ap)
{
    m_pstr = new char[strlen(ap)+1];
    strcpy(m_pstr, ap);
}
String::~String()
{
    delete []m_pstr;
}
void String::display() const
{
    cout<<m_pstr<<endl;
}

int main()
{
    String str1("USA");
    str1.display();
    String str2;
    str2.display();
    system("pause");
    return 0;
} 

如果要定义析构函数,通常也需要定义拷贝构造函数和赋值运算符的重载函数。

目录
相关文章
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
120 4
|
6月前
|
C++ 运维
开发与运维函数问题之析构函数在C++类中起什么作用如何解决
开发与运维函数问题之析构函数在C++类中起什么作用如何解决
49 11
|
7月前
|
C++ 容器
【C++】拷贝构造函数、拷贝赋值函数与析构函数
【C++】拷贝构造函数、拷贝赋值函数与析构函数
131 6
|
7月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
57 2
|
8月前
|
C++ Linux
|
7月前
|
存储 编译器 C语言
【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)
C++类的六大默认成员函数包括构造函数、析构函数、拷贝构造、赋值运算符、取地址重载及const取址。构造函数用于对象初始化,无返回值,名称与类名相同,可重载。若未定义,编译器提供默认无参构造。析构函数负责对象销毁,名字前加`~`,无参数无返回,自动调用以释放资源。一个类只有一个析构函数。两者确保对象生命周期中正确初始化和清理。
|
7月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
55 0
|
8月前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
43 2
|
8月前
|
C++
C++程序中的析构函数
C++程序中的析构函数
72 2
|
8月前
|
编译器 C++
【C++从练气到飞升】03---构造函数和析构函数
【C++从练气到飞升】03---构造函数和析构函数