- 메모리의 할당 -> 오버로딩 부분
- 생성자 호출
- 할당하고자 하는 자료형으로 형 변환
이 중 new 연산자를 오버로딩한다면 1. 메모리 할당
에 해당하는 작업이 오버로딩의 대상이 된다.
나머지는 오버로딩이 불가하다.
원래 메모리 할당에 해당하는 부분을 오버로딩하기에 메모리할당에 관해 필수적으로 들어가야하는 부분이 있다.
void * operator new (size_t size)
{
//to do
void* adr = new char[size];
return adr;
}
void* operator new (size_t size)
: 이 부분은 고정이다. 매개변수로 받은 size는 할당해야하는 메모리의 크기를 알려준다.//to do
: 여기에 오버로딩으로 추가하고 싶은 내용을 넣으면 된다.void* adr = new char[size]; return adr;
: 이 부분도 고정이다. 메모리할당을 실제로 해주는 부분이다.
- 소멸자의 호출
- 메모리 해제 -> 오버로딩 부분
delete 연산이 호출 되면 소멸자가 호출되고 메모리의 해제가 된다.
delete 연산에서 오버로딩 할 수 있는 부분은 2. 메모리 해제
이다.
new 오버로딩과 마찬가지고 필수적으로 들어가야하는 부분이 있다.
void operator delete (void* adr)
{
//to do
delete []adr;
}
void operator delete(void* adr)
: 이 부분은 고정이다. 매개변수 adr은 해제해야 할 메모리(new에서 할당한) 이다.//to do
: 오버로디으로 추가할 내용delete []adr
: 이 부분도 고정이다. 메모리 해제를 실행한다. [ ]이 붙은 이유는 메모리할당이 char형의 배열로 되기 때문이다.Point pos = new Point()
-> 객체Point pos = new Point[]()
-> 객체 배열operator new[]
도 있다.void * operator new[] (size_t size)
{
//to do
void* adr = new char[size];
return adr;
}
함수이름에 new 가 new[]가 된거 빼고는 모두 똑같이 정의하면 된다.
void operator delete[] (void* adr)
{
//to do
delete []adr;
}
delete도 마찬가지이다.