반응형
소멸자란?
소멸자는 return 타입이 없습니다. 그리고 파라미터 또한 없습니다.
#include <iostream>
using namespace std;
class IntArray
{
private:
int* m_arr = nullptr;
int m_length = 0;
public:
IntArray(const int length_int)
{
m_length = length_int;
m_arr = new int[m_length];
}
~IntArray()
{
if (m_arr != nullptr)
delete[] m_arr;
delete[] m_arr;
}
int size() { return m_length; }
}
int main()
{
while (true)
{
IntArray my_int_arr(10000);
delete[] my_int_arr.m_arr;
}
return 0;
}
메모리 누수가 발생하지 않도록 하는 것이 소멸자를 사용할 때 가장 주의해야 할 점입니다. 해당 코드 같은 경우 메모리 누수문제를 해결하지 못한 사례라고 볼 수 있는데요. Intarray()라는 소멸자를 정의하여 동적으로 할당된 메모리를 해제하고 있습니다. 이 소멸자는 객체가 해제될 때 항상 호출되므로, 객체의 수명이 끝날 떄마다 메모리를 안전하게 해제하는 역할을 합니다.
#include <iostream>
using namespace std;
class IntArray
{
private:
int* m_arr = nullptr;
int m_length = 0;
public:
IntArray(const int length_int)
{
m_length = length_int;
m_arr = new int[m_length];
}
~IntArray()
{
if (m_arr != nullptr)
delete[] m_arr;
}
int size() { return m_length; }
};
int main()
{
while (true)
{
IntArray my_int_arr(10000);
}
return 0;
}
이렇게 코드를 해서 메모리가 해제하는 과정이 중복되지 않도록 해주었습니다. 이제 delete[] m_arr는 소멸자에서만 호출되므로 객체가 소멸될 때 메모리가 올바르게 해제됩니다.
반응형
'IT 프로그래밍 > C++' 카테고리의 다른 글
c++ 포인터 설명 (0) | 2024.05.17 |
---|---|
[따배시 7.12]재귀적 함수 출력 (0) | 2024.05.12 |
[따배시 C++ 8.4] 생성자 멤버 초기화 목록, 위임 생성자 (0) | 2024.04.10 |
[따배시C++] 8.3 생성자 (0) | 2024.04.10 |
[C++ 따배시 8.1] 객체지향 프로그래밍과 클래스 (0) | 2024.04.07 |