Invalid use of new and delete

Constructors and destructors print out the values of a_, b_, and c_.

Code #1

Foo *pf = ::new Foo[5]; // operator new[]
::delete pf;            // operator delete
Results:	
  In Foo constructor: 0,0,0
  In Foo constructor: 0,0,0
  In Foo constructor: 0,0,0
  In Foo constructor: 0,0,0
  In Foo constructor: 0,0,0
  In Foo destructor: 0,0,0
  
MSVC and Borland crash here. g++ doesn't crash.

Code #2

Foo *pf = ::new Foo; // operator new
::delete [] pf;      // operator delete[]
MSVC 7.1
In Foo constructor: 0,0,0
Borland (sometimes crashes at the end)
In Foo constructor: 0,0,0
In Foo destructor: 0,0,49017
In Foo destructor: 1,0,0
In Foo destructor: 0,4466260,1
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,257,0
In Foo destructor: -1,0,0
In Foo destructor: 0,4463732,0
In Foo destructor: 49145,4420848,4420848
In Foo destructor: 0,0,0
g++ (sometimes crashes at the end)
In Foo constructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 0,0,0
In Foo destructor: 808202284,876098098,909588524
In Foo destructor: 1920234341,1869898613,824195698
In Foo destructor: 1033,1176530505,1679847279
In Foo destructor: 0,168112064,0
In Foo destructor: 0,0,0
In Foo destructor: 0,688,0
In Foo destructor: 49,1628538200,-552734650
In Foo destructor: 0,0,0