[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

Is there any way to disable global operator new?

google

11/16/2008 10:18:00 AM

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.
1 Answer

Marcel Müller

11/16/2008 4:28:00 PM

0

google@pedriana.com wrote:
> 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.