随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

【07】为多态基类声明virtual析构方法

1、考虑下面的需要,需要一个工厂方法。工厂方法的规则是:在堆上分配一个子类对象,并返回父类指针。使用完毕,delete父类指针。如果父类的析构方法不是virtual,将直接调用父类的析构方法,导致局部销毁的对象,父类成分销毁了,子类成分没有销毁。

2、如果类中有virtual方法,意味着面向抽象编程,也就是会有父类指针指向子类对象,因此这种情况下,必定需要一个virtual析构方法。

3、如果类中没有virtual方法,为了节省空间,析构方法是non-virtual方法。也就意味着,这个类不作为父类。如果你继承这样的类,就会导致上面的局部销毁对象。Java中有final,C#中sealed,禁止继承。C++中没有类似的关键字。因此,不要继承没有virtual方法的类,这样的类不想作为父类。

4、析构方法的重写规则和一般的成员方法不同,体现在:

  a、析构方法重写,方法名不同,分别为父类名和子类名;

  b、纯虚的成员方法,要求子类必须重写,父类可以不实现,纯虚的析构方法,要求子类必须重写(用户不重写,编译器会生成一个重写的析构方法),但同时父类必须提供实现,因为最终要调用父类的析构方法。

posted on   Andy Niu  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2012-01-16 C# 字段、属性、变量
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示