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()
    기존 포인터를 삭제하고 새로운 포인터를 할당한다.
Posted by NeoDreamer
:
BLOG main image
사람의 발목을 잡는건 '절망'이 아니라 '체념'이고 앞으로 나아가게 하는건 '희망'이 아니라 '의지'다. - 암스 중에서 - by NeoDreamer

공지사항

카테고리

전체보기 (793)
Life Story (1)
Thinking (2)
Nothing (5)
---------------* (0)
Dev Story (701)
Com. Story (80)
IT Story (1)
---------------+ (0)
Etc (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :
05-04 17:21