这是一道面试题,记得当时回答的并不好,因为我们对构造函数经常使用,例如单例模式下构造函数我们会声明为私有的,其他情况下构造函数我们都会声明为公有的,但是析构函数是否必须声明为公有的,还真没注意。下面我们就一起学习下。
(一)一个类的析构函数只能有一个,也不能重载
1.类的析构函数,是在对象的生命周期结束后,由系统自动调用的。
2.该函数不需任何参数,不需要传入任何参数,如果非要写一个带参数的析构函数,则会造成编译器的抱怨,造成二义性,这一点和够赞函数不同,构造函数可以根据传入的参数,选择合适的构造函数。构造函数可以显示调用,而析构函数系统负责调用,程序无法控制其调用时机。
(二)构造函数,析构函数必须是公有的吗?
1.析构函数必须给成公有的,因为对象生命周期结束后,系统会调用,如果不是公有的则会引发错误
2.构造函数可以是公有的,私有的,保护的
#include class Test{private:double num;Test(double d){num = d;}//~Test(){} 系统报错public:Test(int n){num = n;}~Test(){}};void Test:: InnerCreate(){ Test inner(3.14);//调用私有的构造函数}int main(){ Test obj(0);//调用公有的构造函数 obj.InnerCreate(); return 0;}