469,160 Members | 2,063 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,160 developers. It's quick & easy.

operator new override/overload?

Hi, if we need to change the behavior of operator new, it is called
overriding or overloading? My other question is, if we change the
behavior of operator new, do we use malloc to do that or we use
operator new?

Jan 13 '06 #1
2 11282
* Shark:
Hi, if we need to change the behavior of operator new, it is called
overriding or overloading?
operator new is a static function, and on that account it would be
'overload'.

However, operator delete is also a static function, but behaves much like a
virtual function with dynamic (run-time) dispatch:
#include <iostream>
#include <ostream>
#include <memory>

struct Base { virtual ~Base() {} };

struct DerivedA: Base
{
static void operator delete( void* p )
{
std::cout << "Deallocating A." << std::endl;
::operator delete( p );
}
};

struct DerivedB: Base
{
static void operator delete( void* p )
{
std::cout << "Deallocating B." << std::endl;
::operator delete( p );
}
};

int main()
{
std::auto_ptr<Base> pA( new DerivedA );
std::auto_ptr<Base> pB( new DerivedB );
}

which yields the output

Deallocating B.
Deallocating A.

as if operator delete were a virtual function.

So in the case of operator delete it's not entirely inappropriate to talk
about 'override'.

What about operator new then, viewed as a kind of same sort of function as
operator delete?

Well, it isn't. Operator new is more like a constructor (you don't override
constructors, and you don't override operator new), and operator delete is
more like a virtual destrutor (you do override virtual destructors).

My other question is, if we change the
behavior of operator new, do we use malloc to do that or we use
operator new?


You can use anything you want, it depends on what you want. But given that
you ask, i.e. not sure, my advice would be to _not_ overload operator new.
Except as a learning experiment -- don't use features you don't understand
in production code, especially not dangerous, low-level features.
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jan 13 '06 #2
"Shark" <cp*******@yahoo.com> wrote in message news:11**********************@g44g2000cwa.googlegr oups.com...
Hi, if we need to change the behavior of operator new, it is called
overriding or overloading? My other question is, if we change the
behavior of operator new, do we use malloc to do that or we use
operator new?


It is not clear what you want. C++ has several operators new. Which one do you need to change?
C++ has the possibility to define a new operator for a class. This is the safest way to go.
It is also possible to override the global new operators, but this needs a lot of care,
since these global new operators are also used in the C++ library functions.
(This means that on many platforms the standard operator new sits already in the shareable libraries,
so you should use a static link to get a consistent use of the changed new operators.)
In addition you should change the delete operators as well to match your new operators.
You could use malloc and free.

F.Z.
Jan 13 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

16 posts views Thread by Edward Diener | last post: by
11 posts views Thread by apex | last post: by
17 posts views Thread by Chris | last post: by
6 posts views Thread by TuxC0d3 | last post: by
9 posts views Thread by Tony | last post: by
19 posts views Thread by C++Liliput | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
1 post views Thread by Mortomer39 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.