结论:当父类存在virtual函数时,则需要实现虚析构函数。
直接上代码:
#include<iostream>
#include<memory>
class AAA {
public:
AAA() { printf("AAA 构造 ... \n"); }
//virtual ~AAA() { printf("AAA 析构 ... \n"); }
virtual void SayOk() = 0;
};
class aaa :public AAA {
public:
aaa() { printf("aaa 构造 ... \n"); }
~aaa() { printf("aaa 析构 ... \n"); }
virtual void SayOk() { printf("aaa SayOk ... \n"); }
};
void test()
{
//aaa aa;
if (1)
{
std::shared_ptr<AAA> sp = std::make_shared<aaa>();
sp->SayOk();
sp = nullptr;
}
printf("-------------- 分隔线 -------------- \n");
if (1)
{
AAA * pp = new aaa();
pp->SayOk();
delete pp;
pp = nullptr;
}
}
int main()
{
test();
return 0;
}
如上,假如AAA不实现虚析构函数,则通过new出来的对象,被析构时,会调用不到子类的析构。
父类声明了虚析构,则能够正确调用子类的析构。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有