class Test
{
public:
};
int main()
{
Test NewTest = Test();
}
릭이 안남는 문제없는 코드이다.
class Test
{
public:
int* Number;
public:
Test() : Number(new int())
{
}
~Test()
{
}
};
int main()
{
Test NewTest = Test();
}
코드를 이렇게 변경하면 릭이 남는다.
릭이 남는 이유는 ? 프로그래머가 new를 이용해서 메모리에 할당해줬기 때문이다.
이 말은 즉, 할당을 했으면 delete를 이용해서 해제해주면 된다는 말과 같다.
(new와 delete는 한쌍이라고 생각하고 사용하자!!)
~Test() // delete는 소멸자에서
{
if(nullptr != Number) //안전 삭제
{
delete Number;
Number = nullptr;
}
}
복습) 릭 체크 해주는 함수
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
지역 변수가 사라지는 시점 : 그 지역변수를 가지고 있는 함수가 사라질때
위의 코드에서 메인이 실행되고
NewTest가 생성될때 Heap에 4바이트를 사용한다.
Test* NewTest = new Test();
이렇게 변경하면 12바이트를 사용한다.
-> Test 포인터 : 8바이트 , 생성자가 호출되고 new int : 4바이트
new를 이용해서 NewTest를 동적 할당 했음으로
if (nullptr != NewTest)
{
delete NewTest;
NewTest = nullptr;
}
delete를 이용해서 해제해주자 !
'C++' 카테고리의 다른 글
namespace (0) | 2020.12.16 |
---|---|
UserTypeOperator (0) | 2020.12.15 |
Destructor(소멸자) (0) | 2020.12.13 |
DefaultParameter(기본인자) (0) | 2020.12.13 |
OverLoading , 컴파일 4단계,네임맹글링 (0) | 2020.12.13 |