Is there any way to disable global operator new?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • google@pedriana.com

    Is there any way to disable global operator new?

    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.
  • =?ISO-8859-1?Q?Marcel_M=FCller?=

    #2
    Re: Is there any way to disable global operator new?

    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.

    Comment

    Working...