new,delete 연산자 오버로딩 주의
- 프로그래밍/C++
- 2011. 4. 1. 11:58
메모리 풀 할때 new 오버로딩 하면 편하다. 그냥 평소처럼 쓰면 되니까. 언제든지 되돌릴수 있고
class Test
{
public:
int a;
int b;
void* operator new(size_t size)
{
printf("한개할당중\n");
Test* temp = (Test*)malloc(size);
return temp;
}
void* operator new[](size_t size)
{
printf("%d 개할당중\n", size / sizeof(Test));
Test* temp = (Test*)malloc(size);
return temp;
}
Test()
{
a = b = 123;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Test* t1, *t2;
t1 = new Test; //size_t 인자를 안넘겼다! (문법)
t2 = new Test[10];
return 0;
}
출저:http://lunapiece.net/?mid=Tips&category=3785&document_srl=3897
여기서 중요한것은 operator new 연산자오버로딩에서 매개변수는 항상 size_t size를 받아줘야하는데,
여기서 size_t는 인자값으로 넘겨줘야하는데 생성자가 호출됨으로써 new가 저절로 타입의 크기를 받는다. 또한 반환될때 그 크기로 포인터캐스팅까지한다(new와 malloc의 차이중 하나 아니겠냐~)
즉 new연산자를 호출할때 타입이 자동으로 들어가는 식이다! (어셈블리 개념)
(newe의 문법이라고 보면 되겠다!!)
이 글을 공유하기