new 연산자 오버로딩
이에 대한 얘기를 하기 전에 먼저 특정 문법이 맞는지 틀린지에 대한 논쟁에 대해 어떻게 확인을 할 수 있을까를 느낄 수 있는 간단한 대화부터 소개합니다.
질문: "Who is a winner?"
답변: "I think that the Code is a winner!"
MS초청 세미나 중에서 MS의 개발 이사의 답변...
class hoo { public: hoo(void); ~hoo(void); void *operator new(size_t size) { return (void *)0x1000; } }; hoo::hoo(void) } hoo::~hoo(void) |
그럼 어떨 때 쓸까?
만약, 객체를 할당하고 소멸하는 시간도 아까울 정도의 프로그램을 개발한다고 하자. 그렇다면 미리 충분한 공간을 잡아놓은 뒤에 객체 생성 요청시에 미리 할당된 메모리를 사용한다면 이를 해결할 수 있을 것이다.
아래 자료 참고 - 가비지 켈렉션 하는 구문은 생략했음다.
#include <iostream> using namespace std; using std::cout; using std::endl; class hoo { static int usage; static hoo my_heap[100]; static int nousage; static hoo *garbage[100]; int hoo_id; public: int hoo::usage;
delete hs[0]; delete hs[1]; *참고로 본 예제에서 5개의 개체를 소멸하지 않았지만 메모리 누수는 없지여... |
다른 연산자는 사용하는 패턴에 따라 중복정의를 할 필요가 없는 경우가 많아 개발자에 따라 그리 유용성이 높지 않을 수 있겠지만 new(new [])와 delete(delete[])연산자의 경우는 프로그램의 크기와 중요성이 크면 클 수록 유용성이 높다고 생각합니다.
|