new,delete 연산자 오버로딩 주의

메모리 풀 할때 new 오버로딩 하면 편하다. 그냥 평소처럼 쓰면 되니까. 언제든지 되돌릴수 있고

 

class Test

{

public:

        int a;

        int b;

 

        voidoperator new(size_t size)

        {             

               printf("한개할당중\n");

               Testtemp = (Test*)malloc(size);

               return temp;

        }

        voidoperator new[](size_t size)

        {

               printf("%d 개할당중\n"size / sizeof(Test));

               Testtemp = (Test*)malloc(size);

               return temp;

        }

        Test()

        {

               a = b = 123;

        }

};

int _tmain(int argc_TCHARargv[])

{

        Testt1, *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의 문법이라고 보면 되겠다!!)

아 이거 이해하는데 넘 힘들었다. 

이 글을 공유하기

댓글

Designed by JB FACTORY