C++ //虚析构和纯虚析构
1 //虚析构和纯虚析构 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 class Animal 8 { 9 public: 10 11 Animal() 12 { 13 cout << "Animal构造函数调用" << endl; 14 } 15 //虚析构 16 //利用虚析构可以解决 父类指针释放子类对象时 不干净的问题 17 18 //virtual~Animal() 19 //{ 20 // cout << "Animal虚析构函数调用" << endl; 21 22 //} 23 24 //纯虚析构 和虚构只能有一个 25 virtual~Animal() = 0; 26 27 //纯虚函数 28 virtual void speak() = 0; 29 }; 30 //纯虚析构 和虚构只能有一个 需要声名和实现 31 //有了纯虚析构 之后 这个类也属于抽象类 无法实例化对象 32 Animal::~Animal() 33 { 34 cout << "Animal纯虚析构函数调用" << endl; 35 } 36 37 class Cat :public Animal 38 { 39 public: 40 41 Cat(string name) 42 { 43 cout << "Cat构造函数调用" << endl; 44 m_Name = new string(name); 45 } 46 47 48 virtual void speak() 49 { 50 cout << *m_Name<<"小猫在说话!" << endl; 51 } 52 ~Cat() 53 { 54 if (m_Name != NULL) 55 { 56 cout << "Cat析构函数调用" << endl; 57 delete m_Name; 58 m_Name = NULL; 59 } 60 } 61 62 string *m_Name; 63 64 }; 65 void test01() 66 { 67 Animal* animal = new Cat("Tom"); 68 animal->speak(); 69 //父类指针在析构的时候 不会调用子类中析构函数 导致子类如果有 70 //堆区属性,出现内存泄漏 71 delete animal; 72 } 73 74 int main() 75 { 76 test01(); 77 78 79 80 system("pause"); 81 82 return 0; 83 84 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15117426.html