Public operator new, private operator delete: getting C2248 “can not access private member” when using new

When you do new Foo() then two things happen: First operator new is invoked to allocate memory, then a constructor for Foo is called. If that constructor throws, since you cannot access the memory already allocated, the C++ runtime will take care of it by passing it to the appropriate operator delete. That’s why you always must implement a matching operator delete for every operator new you write and that’s why it needs to be accessible.

As a way out you could make both of them private and invoke operator new from a public member function (like create()).

Leave a Comment