当前位置: 首页 > 科技观察

EasyC++、析构函数

时间:2023-03-16 10:36:38 科技观察

大家好,我是梁唐。析构函数在我们使用构造函数创建一个对象后,程序负责跟踪这个对象,直到它过期。当对象过期时,程序会自动调用一个称为析构函数的特殊成员函数。析构函数的翻译有些晦涩。它的英文是deconstructor。我个人觉得翻译成破坏函数更准确。也就是说,当对象不再被使用,即将被销毁时,就会调用析构函数。如果我们在构造函数中创建的都是存储持久化的变量,也就是不是使用new创建的对象。这些对象是自动销毁的,不需要析构函数执行任何逻辑。如果在构造函数中使用new来动态分配内存,那么需要在析构函数中加入相应的delete语句来释放内存。例如这个例子:classAlgo{public:Algo(constchar*name){name_=newchar[strlen(name)+1];strcpy(name_,name);}private:char*name_;}在这个例子中,Algo类的name_变量是通过new动态分配的,所以当Algo实例被销毁时,我们需要在析构函数中手动执行删除逻辑。析构函数与构造函数几乎完全一样,只是在类名前加了~。析构函数也可以没有返回值和声明类型,并且析构函数没有参数。添加析构函数后,上面的示例如下所示:classAlgo{public:Algo(constchar*name){name_=newchar[strlen(name)+1];strcpy(name_,name);}~Algo(){delete[]name_;}private:char*name_;}需要注意的一点是,析构函数的调用应该由编译器决定。如果创建了静态存储类对象,则在程序结束时会自动调用析构函数。如果创建的是一个自动存储类对象,当程序执行完该代码块时,会自动调用析构函数。如果是new创建的,使用delete时会调用。一般我们不会手动调用析构函数。由于类对象过期时会自动调用析构函数,所以必须有析构函数。如果程序员不提供析构函数,那么编译器会隐式声明一个默认的析构函数。