C++

UserTypeHeap

Nin 2020. 12. 15. 01:47
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