可以
虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。
#include
#include
using namespace std;
class SoftWare {
public:
SoftWare(){};
virtual ~SoftWare() {
std::cout << __FUNCTION__ << std::endl;
};
//运行期多态
virtual void RunApp() { std::cout << " Interface SoftWare " << std::endl; };
};
class ChatApp : public SoftWare {
public:
ChatApp(){};
~ChatApp() {
std::cout << __FUNCTION__ << std::endl;
};
void RunApp() { std::cout << " Start Chat APP " << std::endl; }
};
int main()
{
SoftWare* app = new ChatApp();
std::cout << "================================" << std::endl;
app->RunApp();
delete app;
app = nullptr;
/*由于SoftWare有虚析构函数,delete释放内存会先调用派生类析构函数,再调用基类析构函数,防止内存泄漏。*/
std::cout << "================================" << std::endl;
return 0;
}
节省内存
类中有虚成员函数时,类会自动进行执行一些工作。包括生成虚函数表和虚表指针,这样会占用额外的内存,如果类无派生类,这种内存开销无疑是浪费;
纯虚函数是在基类中声明的虚函数,它在基类中有定义,在派生类必须定义自己的实现方法。基类不能创建对象,可以使用指针或者引用派生类对象。语法上基类声明纯虚函数的方法,是在函数原型后加“=0”
virtual int TestFunc() = 0;