C++

정적 바인딩과 동적 바인딩에 따른 객체 메모리(틀렸음)

성욱박 2018. 9. 12. 20:46

정적 바인딩 객체 해제

정적 바인딩으로 객체 등록시 해당 객체를 포함하는 함수가 끝나면 소멸자가 자동 호출되어 객체등록이 해제된다.

정적 바인딩으로 객체 등록시 0으로 자동 초기화x


 

void main(){

 

Object object;    //객체선언 => 생성자 호출

 

}<-함수가 끝나면 자동으로 소멸자 호출

 


 

 

동적 바인딩 객체 해제

반면 동적 바인딩으로 객체 등록시 해당함수가 끝나도 힙 영역의 객체메모리는 해제되지 않는다.

메모리 해제되는 것은 해당 객체를 가르키고 있는 참조변수 또는 포인터이다. 이때 힙영역의 객체의 메모리를 해제하기 위해서는 delete 키워드를 사용해야한다.

동적 바인딩으로 객체 등록시 0으로 자동 초기화


 

void main(){

 

Object *p = new Object();    //동적바인딩

 

delete p;    //소멸자함수 호출

 

}


 

*C++은 C언어의 모든것을 그대로 지원하는데 alloc()함수로 동적 메모리를 잡으면 안되나?

 

Object *p;

p = (Object *)calloc(1, sizeof(Object)*1); <-

 

에러는 안나지만 calloc()함수로 동적 할당시 객체로 인식을 못하기 때문에 생성자를 호출하지 않음.

 


 

*참조 또는 포인터가 배열을 가르킬 경우 삭제?

 

int *p = new int[4];

 

delete p;        

 

=> 배열의 0번째 행의 메모리만 삭제. 즉, [0]번지만 메모리 해제되고 나머지는 메모리에 남는다...