首页 > 解决方案 > 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

此代码由首席软件工程师(已离开我们公司)编写。

任何人都可以对你为什么想做这样的事情以及它是如何工作的有一些想法吗?

谢谢

标签: c++new-operator

解决方案


如果您查看这些类的构造函数,您会发现它们具有有趣的副作用,或者将自己注册到某个管理器类,或者将自己存储在静态/全局指针变量中,例如单例。

我不喜欢他们选择以这种方式做事——这违反了最小意外原则——但这并不是一个真正的问题。对象的内存可能(但不一定)泄漏,但它们可能意味着在可执行文件的整个生命周期内都存在,所以没什么大不了的。

(也有可能他们有 customoperator new做一些更奇怪的事情,比如构建到预先分配的静态/全局存储中,尽管这与“为什么”有点相关。)


推荐阅读