作业帮 > 综合 > 作业

为什么有的类把析构函数定义为protected?

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/28 22:01:46
为什么有的类把析构函数定义为protected?
为什么有的类把析构函数定义为protected?
如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函数而导致派生类定义的成员没有被析构,产生内存泄露等问题.虽然把析构函数定义成virtual的可以解决这个问题,但是当其它成员函数都不是virtual函数时,会在基类和派生类引入vtable,实例引入vptr造成运行时的性能损失.如果确定不需要直接而是只通过派生类对象使用基类,可以把析构函数定义为protected(这样会导致基类和派生类外使用自动对象和delete时的错误,因为访问权限禁止调用析构函数),就不会导致以上问题.
====
[原创回答团]