string 객체는 문자열을 저장하기 위해 버퍼를 동적으로 할당해서 관리하는데 이 메모리는 자동으로 회수된다.
그러나 파괴자는 동적으로 할당한 메모리에 대해서는 책임을 지지 않는다.
using namespace std;
void main()
{
double *rate;
rate=new double;
*rate=3.1415;
cout << *rate << endl;
// delete rate;
}
위 코드처럼 rate 포인터 변수를 동적으로 할당하고 해제하지 않으면 메모리 누수가 발생한다.
auto_ptr은 동적으로 할당된 메모리를 자동으로 해제하는 포인터의 래퍼 클래스이다.
void main()
{
auto_ptr<double> rate(new double);
*rate=3.1415;
cout << *rate << endl;
}
auto_ptr은 template<typename T> class auto_ptr 형식으로 정의된 클래스 템플릿으로 T*형의 포인터를 대신 관리한다.
이 클래스의 파괴자에서 delete로 해제하므로 main 함수가 종료될 때 파괴되면서 자동으로 할당한 메모리가 해제된다.
'C++' 카테고리의 다른 글
| [C++] 반복자 (0) | 2022.01.10 |
|---|---|
| [C++] 함수 객체 (0) | 2022.01.10 |
| [C++] 네임 스페이스 (0) | 2022.01.08 |
| [C++] 멤버 포인터 변수, 연산자 (0) | 2022.01.07 |
| [C++] 캐스트 연산자 (static, dynamic, const, reinterpret) (0) | 2022.01.07 |