Is there any way to disable global operator new?

G

google

We need to be able to disable global operator new at compile time. We
are developing a large library and need to control all memory
allocation and cannot have a mistake whereby a mistaken use of global
operator new creeps in. It is not feasible to solve this via
implementing our own global operator new which asserts(false), as
there is no practical way to test all paths of execution. This is a
large and complex library, to say the least. In fact there's a chance
you are using it to read this message. :)

Due to the design of C++ and its special/unusual treatment of new/
delete, I can think of no way to accomplish this, nor can I think of
an alternative means to accomplish what we need. #defining new away
doesn't work because placement new and class new still need to work.
 
M

Marcel Müller

We need to be able to disable global operator new at compile time. We
are developing a large library and need to control all memory
allocation and cannot have a mistake whereby a mistaken use of global
operator new creeps in. It is not feasible to solve this via
implementing our own global operator new which asserts(false), as

Patch a you standard library for testing purposes and remove the global
operator new. You will get a linkage error in case you are calling new
from some point.
But I think that the standard library itself requires this operator. So
you might get some additional errors from there.
there is no practical way to test all paths of execution. This is a
large and complex library, to say the least. In fact there's a chance
you are using it to read this message. :)

While this is not uncommon, you may run into other troubles anyway.

Due to the design of C++ and its special/unusual treatment of new/
delete, I can think of no way to accomplish this, nor can I think of
an alternative means to accomplish what we need. #defining new away
doesn't work because placement new and class new still need to work.

I wonder why it is not possible to replace the global operators in a way
that they have a meaningful implementation of your memory management.

Otherwise you might derive all your base classes from a helper class
that overloads new and delete. Of course, this will not work for PODs.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top