소멸자
// vector.h
class Vector
{
public:
~Vector();
private:
int mX;
int mY;
};
// vector.cpp
Vector::~vector()
{
}
- 소멸자는 개체가 지워질 때 호출된다.
- 클래스 내에서 메모리 할당이 발생하면 오브젝트가 소멸될 때 해당 메모리를 해제해주어야 한다.
가상 소멸자
- 매우 중요한 개념이며, 나중에 자세히 다룰 예정입니다.
소멸자를 이용하여 메모리를 해제하지 않는다면.
// mystring.cpp
Mystring::Mystring()
: mLength(0)
, mCapacity(15)
{
mChars = new char[mCapacity + 1];
}
// main.cpp
void Foo() // main()이 호출한다고 가정
{
Mystring name;
}
Foo()
호출.name
의 생성자가 호출되고mChars
에는 16바이트가 할당된다.Foo()
함수 종료.
→ 16바이트가 힙 영역에 할당된 채로 종료되고, 주소를 잃어버린다.
- 메모리 누수 발생!
개선된 코드
// mystring.h
class MyString
{
public:
Mystring();
~Mystring();
private:
char *mChars;
int mLength;
int mCapacity;
};
// mystring.cpp
Mystring::Mystring()
: mLength(0)
, mCapacity(15)
{
mChars = new char[mCapacity + 1];
}
Mystring::~Mystring()
{
delete[] mChars;
// mCapcity = 0; // 사라지는 오브젝트에 접근할 일이 없기 때문에 굳이 해줄 필요는 없다.
// mChars = NULL;
}
'Language > C++' 카테고리의 다른 글
[C++] 12.Unmanaged Programming: 구조체 VS 클래스 (0) | 2024.01.25 |
---|---|
[C++] 11.Unmanaged Programming: Const flag (0) | 2024.01.25 |
[C++] 9.Unmanaged Programming: 생성자(Constructor) (0) | 2024.01.23 |
[C++] 8.Unmanaged Programming: Instance 생성 (0) | 2024.01.23 |
[C++] 7.Unmanaged Programming: Class (0) | 2024.01.23 |