자세한 사용법은 레퍼런스를 참조하든지 하세요..
C++의 동적 메모리 관리자는 new 와 delete입니다.
과거 malloc 에서 지원하던 메모리 할당을 연산자 수준으로 승격 시켰을뿐 아니라 개체를 위해서는 생성자와 파괴자 호출까지 처리하는 아주 좋은 연산자입니다.
연산자 오버로딩 기법을 이용하면 객체를 위한 메모리 할당 방식도 변경이 가능하기때문에 무척 파워풀해진것은 특징이지만....
여전히 할당한 메모리는 반드시 플머가 헤제해야한다는 문제는 남아 있습니다.
고수는 이것을 당연시 여기고 그런문제로 고통스러워 한다면 아직 많이 멀었니 뭐니 하면서 핑쟌을 주지만 역시나 동적 메모리에서 헤제문제는 영원한 숙제가 분명한것 같습니다.
auto_ptr은 템플릿입니다. 일반성이 지원됨으로 인해서 기본 타입에서 사용자 타입(class)까지 사용이 가능합니다.
그리고 표준 라이브러의 일부이므로 호환성은 걱정하지 않아도 됩니다.
메모리를 할당만 해주면 알아서 헤제해 주기때문에 그 기능이 '포인터 + 자동 헤제'라고 생각하시면 됩니다.
auto_ptr이 하는 일은 생성자의 인수로 전달된 포인터를 내부 멤버 변수에 저장해두고 auto_ptr객체에 행해 지는 포인터 연산을 내부 멤버 변수에 대한 연산으로 중계를 합니다. 한마디로 포이터 연산자를 오버로딩 해 놓은 탬플릿이라고 생각하면 쉬울겁니다.
단점이라면 auto_prtr파괴자는 delete로 메모리를 헤제 하기 때문에 new가 아닌다른 방법으로 할당한 경우에는 사용이 불가합니다.
new[], malloc , Virtur???? 할당한 메모리는 절대로 안됩니다.
auto_ptr자체는 스텍 변수로 사용할때 제기능을 발휘하지 auto_ptr자체를 힙변수로 선언하면 역시나 플머가 힙을 관리에 대한 책임을 져야한다는 아이러니한 문제가 남습니다.--auto_ptr자체는 스택 변수인게 좋습니다---
자세한 사용법은 레퍼런스를 보시든지 해야 하겠지만 간단한 사용법을 소개합니다.
//not use auto_ptr
void main
{ double *rate;
rate = new double;
*rate = 3.14192;
어짜구 저짜구
delete rate; //이부분이 반드시 있어야하지만
}
//use auto_ptr
void main
{ auto_prt<double> rate(new double);
*rate = 3.141592;
내맘대로 하다가.
그냥 끝내도 됨 ///delete없이 끝내도 됨
}
그럼
|
이거 참고 해 보셔도 좋을듯.
auto_ptr 은 단순히 new - delete 를 줄여주는 역할 뿐이지만.
TR1의 shared_ptr는 가비지콜렉터의 효과를 냅니다.