mjunkin@uvicctr.UVic.CA.UUCP (Michael Junkin) (07/10/90)
Hello:
    I'm having a bit of trouble with operator new. Specifically, I have a 
class X for which I often (but not always) want to allocate storage myself 
but sometimes want to use the builtin operator new. Thus, the class X contains
the definition
    static void *operator new(size_t);
The intent is that
    X *x = new X(...);		(1)
can be used to allocate and construct local objects while
    X *x = ::new X(...);	(2)
is used to allocate and construct global objects of class X.
    However, this does not work. The C code generated by both the AT&T
and SUN version 2.0 compilers is the same in both case 1 and case 2. As
an example the program
// *********************************
#include <stddef.h>
#include <iostream.h>
class X {
	int i;
    public:
  	X(int n) { i = n; }
	static void *operator new(size_t);
	static void operator delete(void *) {}
};
void *X::operator new(size_t n) 
{ 
    cout << "allocating locally\n";
    return new char[n];
}
main()
{
    X *x1 = ::new X(1);
    X *x2 = new X(2);
}
// *********************************
when compiled and run produces the output
allocating locally
allocating locally
Have I missed something, or is this a C++ compiler bug? I would appreciate any 
information on this matter.
Thanks in advance,
Michael.
-- 
------------------------------------------------------------------------
    *standard disclaimers apply*
    Michael D. Junkin
    Department of Computer Science
    University of Victoria
    Victoria, B.C.
    CANADA
    mjunkin@csr.UVic.ca (internet)jimad@microsoft.UUCP (Jim ADCOCK) (07/14/90)
In article <1155@uvicctr.UVic.CA.UUCP> mjunkin@uvicctr.UUCP (Michael Junkin) writes: ... >The intent is that > X *x = new X(...); (1) >can be used to allocate and construct local objects while > X *x = ::new X(...); (2) >is used to allocate and construct global objects of class X. ... > static void *operator new(size_t); Interesting. I tried your example on the compiler I've been playing with, and it wouldn't accept the static keyword on operator new, even though E&S implies such use is permissible, but unnecessary. Leaving off "static," my compiler then acts as you would like. Sounds to me like one bug each in two compilers.