随笔 - 322  文章 - 0  评论 - 4  阅读 - 77146

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 }
复制代码

 

 

 

 

posted on   Bytezero!  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 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

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