博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚析构和纯虚析构
阅读量:4695 次
发布时间:2019-06-09

本文共 1258 字,大约阅读时间需要 4 分钟。

虚析构和纯虚析构的共性

1.可以解决父类指针释放子类对象

2.都需要具体的函数实现

 

虚析构和纯虚析构的区别

如果是纯虚析构,则该类属于抽象类,无法实例化对象

 

虚析构语法 virtual ~类名(){}

纯虚析构 virtual ~类名() = 0

纯虚析构的类外实现 类名::~类名(){}

 

1 #include
2 #include
3 using namespace std; 4 5 class Animal 6 { 7 public: 8 Animal() 9 {10 cout << "Animal构造函数调用" << endl;11 }12 virtual void speak() = 0;13 14 virtual~Animal() = 0;15 };16 17 Animal::~Animal()18 {19 cout << "Animal 纯虚析构函数调用" << endl;20 }21 22 class Cat:public Animal23 {24 public:25 Cat(string name)26 {27 cout << "Cat 构造函数调用" << endl;28 m_Name = new string(name);29 }30 31 virtual void speak()32 {33 cout << *m_Name << "猫在说活" << endl;34 }35 36 ~Cat()37 {38 cout << "猫析构函数调用" << endl;39 if(this->m_Name != NULL)40 {41 delete m_Name;42 m_Name = NULL;43 }44 45 }46 public:47 string *m_Name;48 };49 50 void test()51 {52 Animal *animal = new Cat("Tom");53 animal->speak();54 //通过父类指针去释放,会导致子类对象清理不干净,造成内存泄露55 //解决方法是给父类增加虚析构函数56 //虚析构函数是用来解决通过父类指针释放子类对象57 delete animal;58 }59 60 int main()61 {62 test();63 return 0;64 }

 

转载于:https://www.cnblogs.com/mch5201314/p/11603756.html

你可能感兴趣的文章
SPFA 算法详解( 强大图解,不会都难!) (转)
查看>>
正则表达式验证
查看>>
QUIC:基于udp的传输新技术
查看>>
java常见面试题及部分答案
查看>>
【HTML代码】访问页面时,拨打页面中的电话号码
查看>>
重构的步骤
查看>>
动态添加方法的代码分析
查看>>
REDIS 安装
查看>>
thinkPHP5.0使用模型新增数据
查看>>
第二次ScrumMeeting
查看>>
微信二次分享功能开发笔记
查看>>
SQL 优化
查看>>
客户端第一天学习的相关知识
查看>>
python工具pycharm使用-断点调试
查看>>
Linux防火墙的关闭和开启
查看>>
LeetCode - Same Tree
查看>>
Python dict get items pop update
查看>>
[置顶] 程序员必知(二):位图(bitmap)
查看>>
130242014036-(2)-体验敏捷开发
查看>>
constexpr
查看>>