#include <iostream>
#include <new>
#include <cstdlib>
using namespace std;
class MyClass {
int x, y, z;
public:
MyClass() {
x = y = z = 0;
cout << "Constructing 0, 0, 0\n";
}
MyClass(int i, int j, int k) {
x = i;
y = j;
z = k;
cout << "Constructing " << i << ", ";
cout << j << ", " << k;
cout << '\n';
}
~MyClass( ) {
cout << "Destructing\n";
}
void *operator new(size_t size);
void *operator new[](size_t size);
void operator delete(void *p);
void operator delete[](void *p);
void show() ;
};
void *MyClass::operator new(size_t size)
{
void *p;
cout << "Allocating MyClass object.\n";
p = malloc(size);
if(!p) {
bad_alloc ba;
throw ba;
}
return p;
}
void *MyClass::operator new[](size_t size)
{
void *p;
cout << "Allocating array of MyClass objects.\n";
p = malloc(size);
if(!p) {
bad_alloc ba;
throw ba;
}
return p;
}
void MyClass::operator delete(void *p)
{
cout << "Deleting MyClass object.\n";
free(p);
}
void MyClass::operator delete[](void *p)
{
cout << "Deleting array of MyClass objects.\n";
free(p);
}
void MyClass::show()
{
cout << x << ", ";
cout << y << ", ";
cout << z << endl;
}
int main()
{
MyClass *objectPointer1, *objectPointer2;
try {
objectPointer1 = new MyClass[3]; // allocate array
objectPointer2 = new MyClass(5, 6, 7); // allocate object
} catch (bad_alloc ba) {
cout << "Allocation error.\n";
return 1;
}
objectPointer1[1].show();
objectPointer2->show();
delete [] objectPointer1; // delete array
delete objectPointer2; // delete object
return 0;
}
|