c++ - c++ new 不存储对象
问题描述
我已经接管了一些用于在 RTOS 上运行的应用程序的遗留 C++ 代码(用 C++03 编写)。在浏览代码库时,我遇到了这样的结构:
...
new UserDebug(); ///<User debug commands.
...
使用完成的分配new
没有存储在任何地方,所以我看得更深一点,发现了这个
class UserDebug
{
public:
///Constructor
UserDebug()
{
new AdvancedDebug();
new CameraCommand();
new CameraSOG();
new DebugCommandTest();
new DebugCommand();
// 30 more new objects like this
};
virtual ~UserDebug(){};
};
我深入研究了提到的每个类定义和实现,但在任何地方都找不到任何引用delete
。
此代码由首席软件工程师(已离开我们公司)编写。
任何人都可以对你为什么想做这样的事情以及它是如何工作的有一些想法吗?
谢谢
解决方案
如果您查看这些类的构造函数,您会发现它们具有有趣的副作用,或者将自己注册到某个管理器类,或者将自己存储在静态/全局指针变量中,例如单例。
我不喜欢他们选择以这种方式做事——这违反了最小意外原则——但这并不是一个真正的问题。对象的内存可能(但不一定)泄漏,但它们可能意味着在可执行文件的整个生命周期内都存在,所以没什么大不了的。
(也有可能他们有 customoperator new
做一些更奇怪的事情,比如构建到预先分配的静态/全局存储中,尽管这与“为什么”有点相关。)
推荐阅读
- tcl - 使用 SUMO 将 OpenStreetMap 转换为 tcl 文件
- c# - 使用并行线程 C# 进行 SSH 连接
- java - JButton“消失”虽然它在另一个层而不是 JLabel
- javascript - 如何更改“ng2-file-upload”默认行为以将文件输入的名称属性更改为“文件”
- flutter - Flutter Widgets 排列和事件
- c - 什么是文本文件?
- javascript - 使用云功能(使用 react.js)在 Firestore 文档上编写
- django - 登录后 Django Admin (1.11.14) 显示 404 错误 (www.mysite/admin/login/?next=/admin/)
- android - Android Studio 3.1.4 Gradle 同步失败
- node.js - Hapi 服务器启动时如何通知 mocha 测试?