关注
这个是继承才产生的问题,比如A类是B类的父类,学生时代可能遇到可能的代码比较多的是: A *a=new B; 是一个父类指针指向子类开辟的空间,然后delete a的时候只会delete掉指针,不会delete掉指向的空间。 void func(A *a); 这里的func函数可以接受A类 对象指针也可以接受B类对象指针然后在func里面,所以通常简便处理,我们只会写这样一个函数去处理A类对象指针以及它所有的继承类,不然如果A有100个继承类,每个类都写一样的方法,继承还有什么用?仔细看如下代码: #include <iostream>
#include <memory>
#include <string>
#include <thread>
#include <vector>
#include <mutex>
#include <random>
class A
{
public:
A()
{
std::cout << "Construct A:" << std::endl;
}
virtual void print()
{
std::cout << "A:" << std::endl;
}
~A()
{
std::cout << "~A:" << std::endl;
}
};
class B:public A
{
public:
B()
{
std::cout << "Construct B:" << std::endl;
}
void print()
{
std::cout << "B:" << std::endl;
}
~B()
{
std::cout << "~B:" << std::endl;
}
};
void func(A *a)
{
a->print();
}
int main()
{
A *a = new A;
A *b = new B;
func(a);
func(b);
delete a;
delete b;
return 0;
}
输出结果如下:由于A没有虚析构函数,B类构造了但是没能析构,这样的情况多了就会导致内存泄漏。类似的工作里面还会经常用std::vector<A*>来存储所有A类以及A类继承类的指针,那么一定要把所有的父类(A类)的析构函数设为虚析构函数。
查看原帖
1 1
相关推荐
牛客热帖
- 1... 想来字节技术实习,看我这篇就够了!——保姆级面经大放送2.2W
- 2... 外卖员面试经验1.8W
- 3... 25届第一份实习怎么找?1.7W
- 4... 0实习经验上岸字节,分享一下过程经验1.6W
- 5... 【奖】休息放松or学习提升,五一假期和牛牛一起“充充电”🔋1.5W
- 6... 【0429快问快答】99%牛油的疑惑解答(更新至38个问题1.5W
- 7... 准备去参加自己的婚礼1.1W
- 8... 美团后端日常实习一二面(已oc)9411
- 9... 【💰有奖征集】非技术岗位笔面经邀你来分享!攒人品时间到!7829
- 10... 阿里国际 笔试 04296347
正在热议
# 牛友的五一计划 #
15598次浏览 337人参与
# 晒一晒我的offer #
2823197次浏览 49917人参与
# 牛客帮帮团来啦!有问必答 #
396748次浏览 7807人参与
# 如何看待offer收割机的行为 #
193884次浏览 2981人参与
# 无实习如何秋招上岸 #
172512次浏览 2718人参与
# 如何一边实习一边秋招 #
201192次浏览 3994人参与
# 春招别灰心,我们一人来一句鼓励 #
21181次浏览 305人参与
# 非技术岗薪资爆料 #
8268次浏览 152人参与
# 在国企工作的人,躺平了吗? #
72787次浏览 880人参与
# 硬件人的春招flag #
14545次浏览 199人参与
# 女生做医疗销售有前景吗 #
3854次浏览 48人参与
# 字节跳动工作体验 #
53161次浏览 1528人参与
# 聊聊这家公司值得去吗 #
62943次浏览 1229人参与
# 第一次面试 #
17283次浏览 265人参与
# 来聊聊机械薪资天花板是哪家 #
22587次浏览 178人参与
# 机械人,你的秋招第一份简历被谁挂了 #
26956次浏览 491人参与
# 你更愿意参加线上面试还是线下面试? #
6914次浏览 94人参与
# 华为求职进展汇总 #
441709次浏览 4435人参与
# 如何KTV领导 #
7490次浏览 72人参与
# 机械制造2024笔面经 #
278553次浏览 4665人参与