news 2026/10/1 8:44:52

polymorph.cpp里面的“析构函数、智能指针”问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
polymorph.cpp里面的“析构函数、智能指针”问题

分析polymorph.cpp中的问题与修复建议

文件分析

文件中包含了两段代码,都被注释掉了第一段。逐一分析:

第一段代码(第 2-15 行,被/* */注释)

structBase{virtualvoidf(){}};structDerived:Base{voidf()override{}};intmain(){newDerived;return0;}

存在的问题:

  1. 内存泄漏:使用new Derived创建了对象,但从未调用delete来释放内存。
  2. 缺少析构函数:基类没有虚析构函数,在多态使用时可能导致资源泄漏。

第二段代码(第 18-39 行,被/* */注释)

structBase{virtualvoidf(){}Base()=default;};structDerived:Base{voidf()override{}};intmain(){std::unique_ptr<Base>p=std::make_unique<Derived>();p->f();std::cout<<" Derived class object is created and function f() is called."<<std::endl;}

这段代码是正确的:

  1. 使用了智能指针std::unique_ptr避免泄漏。
  2. 虚函数正常工作。
  3. 如果取消注释第 24 行的虚析构函数会更好。

建议的修复方案

方案一:手动管理内存(添加虚析构函数 + delete)

#include<iostream>structBase{virtualvoidf(){}virtual~Base()=default;// 添加虚析构函数};structDerived:Base{voidf()override{}};intmain(){Base*p=newDerived;deletep;// 释放内存return0;}

方案二:使用智能指针(推荐)

#include<iostream>#include<memory>structBase{virtualvoidf(){}virtual~Base()=default;};structDerived:Base{voidf()override{}};intmain(){std::unique_ptr<Base>p=std::make_unique<Derived>();return0;}

总结

主要问题就是内存管理和虚析构函数缺失。在涉及多态的场景中,基类应始终提供虚析构函数,并优先使用智能指针来避免手动new/delete带来的泄漏风险。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 8:44:19

AI辅助学习五步法:从提示词设计到系统回顾的完整流程

1. 为什么"随便写个提示词"注定学不好&#xff1a;从三个真实翻车场景说起我见过太多人用AI辅助学习的方式&#xff0c;基本可以概括成一句话&#xff1a;打开对话框&#xff0c;敲一句"帮我讲讲XX知识"&#xff0c;然后对着满屏输出点头如捣蒜&#xff0c…

作者头像 李华
网站建设 2026/10/1 8:43:33

2026实测:我用了半个月豆包工作的真实体验分

最近我一直在找能帮自己分担重复办公任务的AI工具&#xff0c;之前试过不少生成类的AI产品&#xff0c;大多是生成完内容之后还要自己导出到对应的办公软件里调整格式、同步给团队成员&#xff0c;来回折腾的过程往往要浪费不少额外的时间。上周和同部门用飞书协作的朋友吃饭&a…

作者头像 李华
网站建设 2026/10/1 8:42:53

游戏资源文件解包入门:pak、rdb、资源表怎么拆

游戏资源文件解包入门&#xff1a;pak、rdb、资源表怎么拆 引言 改游戏绕不开"资源包"&#xff1a;客户端里的模型、贴图、配置都打包成 .pak、.npk、.rdb 这类容器文件&#xff1b;服务端也有自己的数据文件格式&#xff08;如 Redis 快照 .rdb&#xff09;。很多新…

作者头像 李华