2008/12/13

매력적인 힙 메모리 관리 템플릿 클래스 auto_ptr

new로 생성한 포인터 변수는 반드시 delete로 할당된 메모리를 해제해 주어야 한다.

은 코드나 중간에 실행 경로를 바꾸는 일이 없을 경우에는 처리가 비교적 쉽지만 예외사항을 처리하고 중간에 함수를 빠져나가는
경우가 있을경우 힙 영역에 할당한 메모리 해제에 대하여 신중해야한다. 이럴경우 auto_prt 을 사용하면 편리하다.

MySQL Connector/C++ 을 사용하면서 사용하게 되었는데 아주 놈이다.

사용 방법은 아래와 같다.
std::auto_ptr< 데이터 타입 > variable( 할당할 데이터 포인터 );

std::auto_ptr< int > myInt( new int(5) );


의 구문은 myInt 를 int 형을 가리키는 포인터이며 새로 생성한 int(5)를 가리키고 있다. 이때 생성한 new
int(5) 는 명시적으로 delete로 해제 하지 않아도 함수가 종료되는 시점에 자동으로 delete가 된다.

auto_ptr 은 기본적으로 포이터만 핸들링 할 수 있으며 포인터 배열( new int[5] )의 경우 메모리 해제에 문제가 있다. 그리고 stl 의 container 에는 사용할 수 없다.

auto_ptr 은 기본 생성자및 소멸자 외에 다음과 같은 메소드를 갖고 있다.
auto_ptr::get()
    auto_ptr이 담고 있는 데이터의 포인터를 반환

auto_ptr::operator *
    auto_ptr이 담고 있는 객체

auto_ptr::operator ->
    auto_ptr 이 담고 있는 객체의 멤버에 접근

auto_ptr::operator =
    auto_ptr 이 가리키고 있는 포이터의 소유권 이전 다른 auto_ptr에게 받아오고 넘겨준 auto_ptr 은 갖고 있던 포인터를 해제함.

auto_ptr::release()
    auto_ptr 이 가리키고 있는 포인터를 명시적으로 삭제함.

auto_ptr::reset()
    기존 포인터를 삭제하고 새로운 포인터를 할당한다

Original Post : http://neodreamer-dev.tistory.com/219

No comments :

Post a Comment