gpt4 book ai didi

C++ new 不存储对象

转载 作者:行者123 更新时间:2023-12-02 18:35:50 26 4
gpt4 key购买 nike

我接管了一些遗留的 C++ 代码(用 C++03 编写),这些代码适用于在 RTOS 上运行的应用程序。在浏览代码库时,我遇到了这样的构造:

...
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 的引用。

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

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

谢谢

最佳答案

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

我不喜欢他们选择这样做——这违反了最小惊喜原则——但这并不是真正的问题。对象的内存可能(但不一定)泄漏,但它们可能应该在可执行文件的生命周期内存在,所以没什么大不了的。

(他们也可能有自定义的operator new,它们会做一些更奇怪的事情,比如构建到预分配的静态/全局存储中,尽管这只是与“原因”有一定关系。)

关于C++ new 不存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68793323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com