Yes. I agree that operator delete[] shoulb be implemented and I mention in post too that I have not implemented that I want to understand the behavior of construction first.
I have changed the implementation and rather that calling:
Code:
void* OverNew::operator new[] (size_t size) throw(bad_alloc)
{
cout<<"\n Inside Array of New Operator:"<<size;
return new OverNew(size);
I am using this:
Code:
void* OverNew::operator new[] (size_t size) throw(bad_alloc)
{
cout<<"\n Inside Array of New Operator:"<<size;
void *ptr;
ptr = malloc(size);
return ptr;
}
It's now printing as what I was expecting. Below is whole code.
Code:
#include<iostream>
#include<string>
using namespace std;
#include "OverNew.h"
OverNew::OverNew(int a,string str)
{
cout <<" \n Inside 2 Parameter Ctr";
age = a;
name = str;
}
OverNew::OverNew(int a)
{
age = a;
cout << "\n Inside Ctr:"<<age;
}
OverNew::OverNew()
{
cout << "\n Inside Empty Ctr ";
}
void* OverNew::operator new( size_t size) throw(bad_alloc)
{
cout << "\n Inside Operator New :"<<size;
void *ptr;
ptr = malloc(size);
return ptr;
}
void* OverNew::operator new[] (size_t size) throw(bad_alloc)
{
cout<<"\n Inside Array of New Operator:"<<size;
// return new OverNew(size);
void *ptr;
ptr = malloc(size);
return ptr;
}
void OverNew::operator delete( void *m)
{
cout<<"\n Inside Overload operator Delete";
if (!m )
return ;
free(m);
}
void OverNew::operator delete[]( void *m)
{
cout<<"\n Inside Overload Array operator Delete";
// delete(m);
if (!m )
return ;
free(m);
}
OverNew::~OverNew()
{
cout <<"\n Inside Destructor";
}
void OverNew::getData()
{
cout<<age <<"\t" <<name;
}
int main()
{
OverNew *N;
try
{
N = new OverNew[10]();
}
catch (bad_alloc)
{
cout<<"Memory Exception";
}
delete []N;
getchar();
return 0;
}
Thanks
Nickman