关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(二)
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2.析构与虚析构函数 为了说明 基类的析构函数必须为虚析构函数 ,我们来实践一下:在A的析构函数中加入输出cout << "This is A class." << endl;同理在B的析构函数中也加入输出cout << "This is B class." << endl; 最后在main函数objectC->print();下方加入语句:delete objectC; objectC = NULL;从而销毁对象,调用析构函数。如果基类A的析构函数非虚析构的话,运行结果如下: 如果将基类A的析构函数改写为虚析构函数:virtual ~A();那么运行的结果如下: 可以清晰的看到,在基类A中如果是非虚析构函数时,销毁objectC 对象的时候则没有调用B析构函数,而若为虚析构函数的话,就会调用B的析构函数。因此为了防止释放指向子类的基类指针时,子类发生内存泄露现象,我们必须将基类的析构函数设置为虚析构! 3.虚函数与纯虚函数 虚函数即是在声明函数的时候在前面加入virtual 关键字如:virtual void print(); 而纯虚函数则是这样定义的:virtual void print() = 0; 即纯虚函数没有实体,实体是需要它的继承重写来实现的。我们来看一段实例代码: // Test1.cpp :