schmidt@zola.ics.uci.edu (Doug Schmidt) (11/30/89)
On page 19 of Stroustrup's `Exception Handling for C++' paper from the
``C++ at Work'' conference it states:
It is possible to disallow free store allocations of objects of a
class x by declaring x::operator new () private.
However, cfront 2.0 does not appear to enforce this, as the following example
illustrates:
----------------------------------------
#include <stdio.h>
#include <stdlib.h>
class x
{
public:
x () { printf ("constructing x\n"); }
private:
void *operator new (size_t size) { printf ("size = %d\n", size);
return ::new char[size]; }
};
main ()
{
x *y = new x;
}
----------------------------------------
When compiled with CC 2.0 neither an error nor a warning is given:
----------------------------------------
% CC new.c
CC new.c:
"new.c", line 5: warning: x has x::operator new() but no operator delete()
/usr/gnu/gcc -L/usr/public/lib/CC new.c -lC
% a.out
size = 1
constructing x
----------------------------------------
Therefore, I'd be interested to know whether 2.0 simply doesn't fully
implement the current semantics of operator new or whether the
statement from the article is mistaken.
thanks,
Doug
--
Any man's death diminishes me, | schmidt@ics.uci.edu (ARPA)
Because I am involved in Mankind; | office: (714) 856-4043
And therefore never send to know for whom the bell tolls;
It tolls for thee -- John Donne