class B{

public :

B(){

std::cout<<"B의 생성자 호출"<<std::endl;

}

~B(){

std::cout<<"B의 소멸자 호출"<<std::endl;

}

};


template<class T>

T* alloc(int _size)

{

void* buff = malloc(_size);

return new(buff) T;

}


template<class T>

void dealloc(T* _p)

{

_p->~T();

free(_p);

}




int main(){



B* addrs =  alloc<B>( sizeof(B) );


dealloc(addrs);


....

}






http://drunkenpsycho.tistory.com/13 에서 일부 발췌



malloc / new 차이점

  C++에서는 기본적으로 malloc과 new 모두 사용이 가능하다. 그렇다면 차이점은 어떤 것이 있고, 어떠한 경우에 malloc이나 new를 선택하느냐를 알아보자.

  1) malloc은 기본적으로 라이브러리 제공 함수로, 함수 콜을 요청하게 된다. 하지만, new는 C++ 언어에서 제공하는 기본 키워드로, 별도의 라이브러리 추가없이 바로 사용이 가능하다.

  2) malloc은 기본적으로 사이즈를 매개변수로 받고, 리턴타입이 void *형이므로 sizeof 와 캐스트 연산자의 도움을 받아야 쉬운 코딩이 가능하다. 하지만 new는 할당할 타입을 지정하면, 알아서 할당할 타입의 포인터로 넘어오기 때문에, 할당할 타입과 같은 타입의 포인터 변수로 받아오기만 하면 끝이다.

  3) malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다. 

  4) new 키워드는 생성자를 자동으로 호출하게 된다. 생성자는 객체를 자동으로 초기화 해주는 함수로, malloc과 new의 가장 큰 차이점이다. 





http://kldp.org/node/89335




template<class T> 
T* alloc(int _size)
{
      void * buff = malloc(_size);
      return new(buff) T;             // 생성자 호출됨. 
}




template<class T>
void destroy(T* p)
{
  p->~T();
  free(p);
}


반응형

+ Recent posts