📜  C++中的析构函数

📅  最后修改于: 2021-05-30 15:16:50             🧑  作者: Mango

什么是析构函数?
析构函数是一个破坏或删除对象的成员函数。

句法:

~constructor-name();

析构函数的属性:

  • 销毁对象时,将自动调用析构函数。
  • 不能将其声明为static或const。
  • 析构函数没有参数。
  • 它没有返回类型,甚至没有空。
  • 具有析构函数的类的对象不能成为联合的成员。
  • 析构函数应在该类的公共部分中声明。
  • 程序员无法访问析构函数的地址。

什么时候调用析构函数?
当对象超出范围时,将自动调用析构函数:
(1)函数结束
(2)程序结束
(3)包含局部变量的块结尾
(4)调用删除运算符

析构函数与普通成员函数有何不同?
析构函数的名称与带波浪号(〜)的类的名称相同
析构函数不接受任何参数,也不返回任何东西

CPP
class String {
private:
    char* s;
    int size;
 
public:
    String(char*); // constructor
    ~String(); // destructor
};
 
String::String(char* c)
{
    size = strlen(c);
    s = new char[size + 1];
    strcpy(s, c);
}
String::~String() { delete[] s; }


一个类中可以有多个析构函数吗?
不可以,一个类中只有一个析构函数,其类名前面带有〜,没有参数,也没有返回类型。

什么时候需要编写用户定义的析构函数?
如果我们不在类中编写自己的析构函数,则编译器会为我们创建一个默认的析构函数。除非我们在类中动态分配了内存或指针,否则默认析构函数可以正常工作。当一个类包含指向在该类中分配的内存的指针时,我们应该编写一个析构函数以释放该类实例之前的内存。必须这样做以避免内存泄漏。

析构函数可以是虚拟的吗?
是的,事实上,当我们有一个虚函数时,在基类中使析构函数虚拟是一个好主意。有关更多详细信息,请参见虚拟析构函数。
您可能想对析构函数进行测验。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”