스마트 포인터는 C++에서 메모리 관리를 자동화하기 위해 제공되는 클래스 템플릿으로, 객체의 생명 주기를 관리하고 메모리 누수를 방지해주기 때문에 대부분의 경우 명시적으로 소멸자를 선언하지 않아도 되지만 스마트 포인터 사용여부와 상관없이, 클래스의 특성에 따라 소멸자가 필요한 경우가 있다.
class Dog {
public:
void bark() { cout << "멍멍!" << endl; }
};
int main() {
unique_ptr<Dog> dog = make_unique<Dog>();
dog->bark(); // 스마트 포인터가 Dog 객체의 생명 주기를 관리
return 0; // 프로그램 종료 시 Dog 객체 메모리 자동 해제
}
class Dog {
int* data;
public:
Dog() { data = new int[10]; }
~Dog() {
delete[] data; // 동적 메모리를 해제
cout << "Dog 소멸" << endl;
}
void bark() { cout << "멍멍!" << endl; }
};
int main() {
unique_ptr<Dog> dog = make_unique<Dog>();
dog->bark(); // 스마트 포인터가 Dog 객체의 생명 주기를 관리
return 0; // Dog 소멸자가 호출되며 동적 메모리도 해제됨
}