Search code examples
c++new-operator

c++ new without storing object


I've taken over some legacy C++ code (written in C++03) which is for an application that runs on an RTOS. While browsing the codebase, I came across a construct like this:

...
new UserDebug(); ///<User debug commands.
...

Where the allocation done using new isn't stored anywhere so I looked a bit deeper and found this

class UserDebug
{
  public:
    ///Constructor
    UserDebug()
    {
        new AdvancedDebug();      
        new CameraCommand();     
        new CameraSOG();         
        new DebugCommandTest();  
        new DebugCommand();      
        // 30 more new objects like this
    };

    virtual ~UserDebug(){};
};

I dug deeper into each of the class definitions and implementations mentioned and couldn't find any reference to delete anywhere.

This code was written by the principal software engineer (who has left our company).

Can anyone shed some ideas on why you would want to do something like this and how does it work?

Thanks


Solution

  • If you look into the constructors of those classes you’ll see that they have interesting side effects, either registering themselves with some manager class or storing themselves in static/global pointer variables á la singletons.

    I don’t like that they’ve chosen to do things that way - it violates the Principle of Least Surprise - but it isn’t really a problem. The memory for the objects is probably (but not necessarily) leaked, but they’re probably meant to exist for the lifetime of the executable so no big deal.

    (It’s also possible that they have custom operator news which do something even odder, like constructing into preallocated static/global storage, though that’s only somewhat relevant to the ‘why’.)